【问题标题】:Debugging Seemingly Random Exceptions in Xcode在 Xcode 中调试看似随机的异常
【发布时间】:2013-08-07 20:22:25
【问题描述】:

我已经在这几天了,几天前问过this question。我认为最好更清楚地重新表述这个问题。

我在 UINavigationController 中有一系列 UICollectionViewController。每次用户进行选择时,屏幕上都会推送一个新的集合视图,该集合视图负责从 API 获取其内容。

有时此时会发生崩溃。每次的例外情况都不同。通常,它是以下之一:

*** Collection <NSConcreteMapTable: 0x1922cf60> was mutated while being enumerated.

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSSetM: 0x203f26b0> was mutated while being enumerated.'

有时它甚至不会抛出异常,但程序会在“空线程”中暂停,并显示error: address doesn't contain a section that points to a section in a object file。 Finally, this error is more consistently reproducible when an item is selected, the new view is pushed, and then the back button is quickly pressed as soon as it appears.但它也可能在没有按下后退按钮的情况下发生。

我已经附加了我自己的未捕获异常处理程序来打印堆栈跟踪。在所有情况下,我自己的类都没有在跟踪中。

我设置了“异常中断”,但它永远不会在任何有意义的地方停止 - 通常是一些不起眼的汇编代码,只是读取 trap 或在 UIApplicationMain 中。

所以我的问题是:我什至从哪里开始调试呢?

如果有帮助,我可以发布一个堆栈跟踪示例。

【问题讨论】:

    标签: ios xcode debugging exception


    【解决方案1】:

    首先,在 Xcode 中设置异常断点。它会在抛出异常之前停止,这样你就知道是谁造成了它。

    似乎发生的事情是你有代码

    for (id object in somearray) ...
    

    当该循环运行时,有人修改了一些数组。那是致命的。您可能必须考虑如何编写代码。例如,你可以写

    for (id object in [somearray copy]) ...

    然后你可以随心所欲地修改 somearray。也许您的代码不是线程安全的,并且另一个线程在一个线程迭代它时修改了 somearray。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 2012-12-25
      • 2021-07-20
      • 1970-01-01
      • 2010-11-05
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多