当我崩溃时(出于我理解的原因;这不是问题)当我尝试做一些Cocoa不适合的事情时,例如调用一个不存在的方法或试图将nil插入到一个集合中,调试器显示从main()到__pthread_kill的堆栈,而没有任何有一个名为objc_exception_rethrow的框架(从main开始第9个)。这使我相信Cocoa Touch正在尝试做一些或其他事情来恢复所有异常并优雅地死去或其他事情。但是,在调试时,如果没有实际使用Xcode4的调试工具来调查调用堆栈帧的能力,或者甚至看到我的代码中我崩溃的位置,这是非常令人恼火的。

是否有某种方法可以使objc_exception_rethrow行为不会发生,并且只要引发异常就会崩溃?也许有一个调试设置使它更早崩溃(在 时间)?(我还没有弄乱这个项目中的任何构建设置。)

有帮助吗?

解决方案 2

我找到了答案:在Obj-C异常上设置断点。当objc_exception_throw被击中时,它会转到调试器,这很好。不幸的是,这种情况发生在打印异常之前,但我们可以通过将断点的操作设置为(调试器操作)来实现(大多数情况下) po *(id *)($ebp + 8).

其他提示

我不知道可以禁用重新投掷异常的任何Xcode设置。我知道他们被运行时重新抛出。您可以尝试在没有附加调试器的情况下运行应用程序并让它崩溃。崩溃报告应包含一个“最后一个例外回溯”一节,这将在这种情况下完全给您所需的内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top