gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:56:50 24 4
gpt4 key购买 nike

(Draco 在下面的检查回复中提供了一个绝妙的想法。)

当应用程序委托(delegate)处理自定义 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,所有异常(exception)。 (Break on catch 也不起作用。)

enter image description here

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

更新 2

重新命名以提供其他用户更广泛的搜索范围。
是:“应用程序在没有调试器的情况下崩溃,但不是。崩溃日志告诉我什么?”

最佳答案

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

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

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

即使调试器没有运行,您也可以在应用程序运行时在 XCode 中查看它。

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

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

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

关于objective-c - 当调试器不会崩溃并且崩溃日志缺少详细信息时,如何调试崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com