【发布时间】:2012-07-13 04:15:18
【问题描述】:
(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 关于所有异常断点的观点。这些都设置为 Break On Throw,所有例外。 (Break on catch 也不起作用。)
在调试器中运行时,如果没有异常,没有崩溃,这是如何工作的?
更新 2
重新命名以提供更广泛的其他用户搜索范围。 是:“应用程序在没有调试器的情况下崩溃,但不是。崩溃日志告诉我什么?”
【问题讨论】:
-
你能至少告诉我你为什么投反对票吗?我被这个难住了。
-
我不知道为什么这被否决了。你是说只有当你没有从 Xcode 运行应用程序时才会崩溃(在这种情况下,世界上所有的断点都对你没有帮助?)。您能否更清楚地描述这一点,这可能就是您被否决的原因。
-
另外,这可能不是完整的日志,您可能遗漏了问题中的重要信息。请参阅developer.apple.com/library/ios/technotes/tn2151/_index.html 和相关的 WWDC 视频以获取有关崩溃日志的帮助。
-
感谢您的关注。我可能可以将其缩小到大约 2000 行代码。我想我为这个问题提供了一些背景信息,即如何在操作之前、期间和之后观察通知(NSOperation)。我可能会在这些通知中看到一些熟悉的内容,这些内容可能会导致我找到崩溃的原因。然后我可以更准确地观察代码。同时,我想我会因为提出一个我无法回答的诚实问题而受到打击。我将浏览提交日志,看看是否能找到一些东西。
-
哦,谢谢你的第二条评论。这可能会有所帮助。
标签: objective-c debugging crash