iOS objc_msgSend 崩溃,没有给出报告或警告

Posted

技术标签:

【中文标题】iOS objc_msgSend 崩溃,没有给出报告或警告【英文标题】:iOS objc_msgSend crash, with no report or warning given 【发布时间】:2012-06-09 09:15:50 【问题描述】:

我正在测试我的应用程序,非常努力地推动它,我让它崩溃(黑屏,图像不保存,回到跳板)。但是,我没有在控制台中记录任何崩溃报告。当我使用分析器进行测试时,我得到的只是一条消息,说目标已死亡,但它没有提供任何线索。

在管理器中,我得到了设备崩溃日志,它给了我这个我相信告诉我我正在向我发布的东西发送消息(objc-msgSend + 22)?我在正确的轨道上吗?

---

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x576e6f69
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x34f8ef7e objc_msgSend + 22
1   CoreFoundation                  0x371d7e90 CFRetain + 76
2   CoreFoundation                  0x371e1b74 +[__NSArrayI __new::] + 48
3   CoreFoundation                  0x371e1a8e -[__NSPlaceholderArray initWithObjects:count:] + 294
4   CoreFoundation                  0x371e9394 -[NSArray initWithArray:range:copyItems:] + 756
5   CoreFoundation                  0x371fcd5a +[NSArray arrayWithArray:] + 66
6   AVFoundation                    0x335da766 -[AVCaptureSession outputs] + 146
7   AVFoundation                    0x335de26e -[AVCaptureSession _doDidStop:] + 38
8   AVFoundation                    0x335dfaea -[AVCaptureSession _handleNotification:payload:] + 2002
9   AVFoundation                    0x335d8af6 avcaptureSessionFigRecorderNotification + 1202
10  AVFoundation                    0x335fafd8 AVCMNotificationDispatcherCallback + 184
11  CoreFoundation                  0x3725b7c8 __CFNotificationCenterAddObserver_block_invoke_0 + 116
12  CoreFoundation                  0x3725b540 ___CFXNotificationPost_block_invoke_0 + 64
13  CoreFoundation                  0x371e7090 _CFXNotificationPost + 1400
14  CoreFoundation                  0x371ef1c6 CFNotificationCenterPostNotification + 102
15  CoreMedia                       0x366eeeb0 CMNotificationCenterPostNotification + 112
16  Celestial                       0x374b08a2 FigRecorderRemoteCallbacksServer_NotificationIsPending + 478
17  Celestial                       0x374b06ba _XNotificationIsPending + 54
18  Celestial                       0x374b0678 figrecordercallbacks_server + 92
19  Celestial                       0x374af642 remrec_ClientPortCallBack + 146
20  CoreFoundation                  0x37258f0c __CFMachPortPerform + 356
21  CoreFoundation                  0x3726351c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
22  CoreFoundation                  0x372634be __CFRunLoopDoSource1 + 134
23  CoreFoundation                  0x3726230c __CFRunLoopRun + 1364
24  CoreFoundation                  0x371e549e CFRunLoopRunSpecific + 294
25  CoreFoundation                  0x371e5366 CFRunLoopRunInMode + 98
26  AVFoundation                    0x335ef4d0 -[AVRunLoopCondition _waitInMode:untilDate:] + 348
27  AVFoundation                    0x335ef36c -[AVRunLoopCondition waitUntilDate:inMode:] + 20
28  AVFoundation                    0x335dc13a -[AVCaptureSession _stopPreviewing] + 438
29  AVFoundation                    0x335dc2d6 -[AVCaptureSession _setRunning:] + 166
30  AVFoundation                    0x335dbe42 -[AVCaptureSession stopRunning] + 274
31  zApp                            0x0007e1ce 0x79000 + 20942
32  UIKit                           0x30fa5b8e -[UIViewController _setViewAppearState:isAnimating:] + 138
33  UIKit                           0x30fff8a8 -[UIViewController beginAppearanceTransition:animated:] + 184
34  UIKit                           0x310468be -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 4098
35  UIKit                           0x31045360 -[UIViewController presentViewController:withTransition:completion:] + 3116
36  UIKit                           0x310a06a0 -[UIViewController presentModalViewController:animated:] + 24
37  CoreFoundation                  0x371e93f6 -[NSObject performSelector:withObject:withObject:] + 46
38  UIKit                           0x30f7ee00 -[UIApplication sendAction:to:from:forEvent:] + 56
39  UIKit                           0x30f7edbc -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 24
40  UIKit                           0x30f7ed9a -[UIControl sendAction:to:forEvent:] + 38
41  UIKit                           0x30f7eb0a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 486
42  UIKit                           0x30f7f442 -[UIControl touchesEnded:withEvent:] + 470
43  UIKit                           0x30f7d924 -[UIWindow _sendTouchesForEvent:] + 312
44  UIKit                           0x30f7d312 -[UIWindow sendEvent:] + 374
45  UIKit                           0x30f6368e -[UIApplication sendEvent:] + 350
46  UIKit                           0x30f62f34 _UIApplicationHandleEvent + 5820
47  GraphicsServices                0x339a5224 PurpleEventCallback + 876
48  CoreFoundation                  0x3726351c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
49  CoreFoundation                  0x372634be __CFRunLoopDoSource1 + 134
50  CoreFoundation                  0x3726230c __CFRunLoopRun + 1364
51  CoreFoundation                  0x371e549e CFRunLoopRunSpecific + 294
52  CoreFoundation                  0x371e5366 CFRunLoopRunInMode + 98
53  GraphicsServices                0x339a4432 GSEventRunModal + 130
54  UIKit                           0x30f91cce UIApplicationMain + 1074
55  zApp                            0x0007ffa6 0x79000 + 28582
56  zApp                            0x0007a680 0x79000 + 5760

【问题讨论】:

很难说....也许发布一些与堆栈帧 15 和 16 相关的代码。我假设“Celestial”是您的代码,它正在调用或触发 CMNotificationCenterPostNotification 事情开始的地方错了。 Celestial 不是应用程序代码,zApp 第 31、55、56 行是。第 31 行是有趣的,如果你有那个确切的二进制文件的 dSYM,Xcode 也应该表明这一点。它似乎在显示导致AVCaptureScreen 停止运行的模式视图时被调用。很可能是内存泄漏或僵尸。我们来自 Kreiri 的以下回答中的提示。 【参考方案1】:

    如果您怀疑自己过度发布了某些内容,请尝试在启用 NSZombie 的情况下运行您的应用程序。 (how to enable NSZombie)

    您可以set exception breakpoint在控制台打印回溯。

【讨论】:

【参考方案2】:

有时当您将对象设置为通知的观察者时会发生这种情况,例如

[[NSNotificationCenter defaultCenter] addObserver //details

发布时不要将其从观察者列表中删除。 系统尝试向其发送消息,但应用程序崩溃,因为它不存在。

尝试添加

[[NSNotificationCenter defaultCenter] removeObserver:self];

在 dealloc 函数中。(即使您正在使用 arc,创建一个 dealloc 函数并将其写入其中)。

祝你好运

【讨论】:

我已经添加了 [[NSNotificationCenter defaultCenter] removeObserver:self];几乎每个有观察者的班级都添加了。我希望它会起作用。 交叉手指:) 如果可能的话,您可能想考虑使用完成块。它们更稳定。 很高兴能为您服务:))

以上是关于iOS objc_msgSend 崩溃,没有给出报告或警告的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地调试 objc_msgSend 中的崩溃?

iOS之深入解析消息转发objc_msgSend的应用场景

RestKit 在 RKManagedObjectRequestOperation objc_msgSend 期间崩溃

为啥 deleteRecording 崩溃(AVAudioRecorder,iOS)?

ios 11 的商店服务崩溃

IOS objc_msgSend 32位和64位