(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,所有例外。 (捕获时间也不起作用。)
当在调试器中运行时没有异常,没有崩溃时,这是如何工作的?
更新2
重新命名为其他用户提供更一般的搜索范围。 是:“应用程序崩溃没有调试器,但没有。崩溃日志告诉我什么?”
答案 0 :(得分:2)
这不会回答您的明确问题,但它确实回答了隐含的问题:
“当调试器不会崩溃并且崩溃日志缺少详细信息时,如何调试崩溃?”
您可以查看的不仅仅是XCode Organizer中的崩溃日志。查看“管理器设备”部分中的控制台输出;查看发生崩溃的设备并单击Console。您应该能够在那里看到NSLog语句的调试输出,即使它没有使用调试器运行。
即使调试器未运行,您也可以在应用程序运行时在XCode中查看此内容。
控制台显示的不仅仅是应用程序的输出,因此您必须对其进行筛选以查看应用程序输出。您将在相应的行上看到应用程序名称。
您可以使用为Debug,Ad-Hoc或Release编译的代码执行此操作。尝试与别人的应用程序。 (尝试使用Twitter。你会在那里看到一些调试日志。在Safari中尝试。你可能会看到你的其他被暂停的应用程序被jetsam杀死了。)
您可能无法看到它崩溃的线路,但您应该能够通过明智地插入一些调试代码来缩小它。