gpt4 book ai didi

ios - 如何从 Xcode IOS 崩溃中查找与可变内存地址相关的代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:19 29 4
gpt4 key购买 nike

我这里有一个奇怪的崩溃,我认为它是由外部库引起的,但我在跟踪堆栈跟踪时遇到了麻烦,并且不确定如何使用 Xcode 的内存探索工具。

这是我在控制台崩溃时得到的信息:

*** Terminating app due to uncaught exception 'NSGenericException',
reason: '*** Collection <__NSArrayM: 0x208c5d00> was mutated while being enumerated.'
*** First throw call stack:
(0x37ae32a3 0x35e0d97f 0x37ae2d85 0x7c57d 0x728b1 0x6b865 0x34d9f11f 0x34d9e4b7 0x34da31bd 0x37ab6f3b 0x37a29ebd 0x37a29d49 0x368602eb 0x38ffb2f9 0x643d1 0x64358)
libc++abi.dylib: terminate called throwing an exception

我正在使用 MKNetworkKits UIImageView setImageFromURL 添加项向 UITableViewCell ImageView (自定义 ImageView 对象,而不是 UITableViewCell 附带的默认 ImageView )提供图像。当我删除此 setImageFromURL 调用时,我没有遇到任何崩溃。

我尝试在命令行上使用 dwarfdumpatos,但上面崩溃中的地址都没有链接到任何特定的函数地址。

我已经搜索了正在执行 forin 枚举循环的地方,但似乎找不到任何实际改变数据的地方。显然我忽略了一些东西..

如有任何建议/提示/帮助,我们将不胜感激..

编辑:感谢到目前为止的评论。关于如何使用内存地址来追踪实际代码行的任何提示都会有所帮助 - Xcode 可以做一些 Visual Studio 调试器可以做的事情,关于代码和内存检查吗?

最佳答案

步骤:

  1. 运行应用程序并检查哪个 ViewController 应用程序因此异常而崩溃。
  2. 一旦找到 ViewController,请检查该 Controller 的整个代码是否符合 NSArray
  3. 检查您从该 Controller 调用的相关委托(delegate)(如果有)。
  4. 检查您在该 Controller 中使用的所有自定义子类。

从描述来看,您似乎正在枚举一个 NSArray 并检查它的值。一旦找到您想要更改这些值的值。因此,您正在创建 NSArraymutableCopy 并尝试在当前运行的枚举中进行更改。

解决方案:

  1. 在枚举之外创建 NSMutableArray。在枚举 NSArray 时,当您找到要更改的值时,objectAtIndex: 将对两个数组保持相同。在可变副本(在外部创建)中更改它。 [不利于内存]
  2. 在当前 NSArray 的枚举之外创建 NSMutableArray。然后枚举NSMutableArray。 [在枚举可变副本时枚举会变慢]

猎杀 Bug!

关于ios - 如何从 Xcode IOS 崩溃中查找与可变内存地址相关的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945705/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com