当调试器不会崩溃并且崩溃日志缺少详细信息时,如何调试崩溃?

时间:2012-07-13 04:15:18

标签: objective-c debugging crash

(Draco在下面的检查回复中提供了一个很好的主意。)

当应用程序委托处理自定义URL时,程序中会发生此崩溃,然后在另一个线程上启动操作。有时操作结束,我可以在UI中看到结果。但它总是崩溃。

仅在没有调试器的情况下运行时才会发生这种情况。这是崩溃日志:

0   libobjc.A.dylib                 0x37d9ff7e objc_msgSend + 22
1   CoreData                        0x3634bbd2 -[_PFManagedObjectReferenceQueue _processReferenceQueue:] + 934
2   CoreData                        0x3634efd0 _performRunLoopAction + 196
3   CoreFoundation                  0x359d2b14 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12
4   CoreFoundation                  0x359d0d50 __CFRunLoopDoObservers + 252
5   CoreFoundation                  0x359d10aa __CFRunLoopRun + 754
6   CoreFoundation                  0x3595449e CFRunLoopRunSpecific + 294
7   CoreFoundation                  0x35954366 CFRunLoopRunInMode + 98
8   GraphicsServices                0x375f0432 GSEventRunModal + 130
9   UIKit                           0x33460cce UIApplicationMain + 1074
10  myApp                           0x000e2770 main (main.m:15)
11  myApp                           0x000e2728 start + 32

看起来它试图回应一个事件,或者更具体地说是一个通知。如果是这种情况,我猜测已删除了tageted观察者或者已添加的对象已被解除分配。

有没有办法拦截通知并查看其中的内容?如果可以的话,我可以确定哪个观察者失踪了,或者至少缩小了它。


更新已添加到WrightsCS关于All Exceptions断点的地址。这些都设置为Break On Throw,所有例外。 (捕获时间也不起作用。)

enter image description here

当在调试器中运行时没有异常,没有崩溃时,这是如何工作的?

更新2

重新命名为其他用户提供更一般的搜索范围。 是:“应用程序崩溃没有调试器,但没有。崩溃日志告诉我什么?”

1 个答案:

答案 0 :(得分:2)

这不会回答您的明确问题,但它确实回答了隐含的问题:

“当调试器不会崩溃并且崩溃日志缺少详细信息时,如何调试崩溃?”

您可以查看的不仅仅是XCode Organizer中的崩溃日志。查看“管理器设备”部分中的控制台输出;查看发生崩溃的设备并单击Console。您应该能够在那里看到NSLog语句的调试输出,即使它没有使用调试器运行。

即使调试器未运行,您也可以在应用程序运行时在XCode中查看此内容。

控制台显示的不仅仅是应用程序的输出,因此您必须对其进行筛选以查看应用程序输出。您将在相应的行上看到应用程序名称。

您可以使用为Debug,Ad-Hoc或Release编译的代码执行此操作。尝试与别人的应用程序。 (尝试使用Twitter。你会在那里看到一些调试日志。在Safari中尝试。你可能会看到你的其他被暂停的应用程序被jetsam杀死了。)

您可能无法看到它崩溃的线路,但您应该能够通过明智地插入一些调试代码来缩小它。