Objective c 有没有办法知道哪个对象收到了objc_释放消息?
使用Objective c 有没有办法知道哪个对象收到了objc_释放消息?,objective-c,macos,memory-management,exc-bad-access,Objective C,Macos,Memory Management,Exc Bad Access,使用EXC\u BAD\u访问获取崩溃,堆栈符号如下所示: po [NSThread callStackSymbols] <_NSCallStackArray 0x608000052c60>( 0 ??? 0x00000001077e66cd 0x0 + 4420691661, 1 Flume-Debug 0x000000010003ee60 main + 0, 2
EXC\u BAD\u访问获取崩溃
,堆栈符号如下所示:
po [NSThread callStackSymbols]
<_NSCallStackArray 0x608000052c60>(
0 ??? 0x00000001077e66cd 0x0 + 4420691661,
1 Flume-Debug 0x000000010003ee60 main + 0,
2 libobjc.A.dylib 0x00007fffdbde90fc _ZN12_GLOBAL__N_119AutoreleasePoolPage11tls_deallocEPv + 110,
3 libsystem_pthread.dylib 0x00007fffdc8eb50f _pthread_tsd_cleanup + 544,
4 libsystem_pthread.dylib 0x00007fffdc8eb249 _pthread_exit + 152,
5 libsystem_pthread.dylib 0x00007fffdc8e9ab6 pthread_sigmask + 0,
6 libsystem_pthread.dylib 0x00007fffdc8e99f7 _pthread_body + 0,
7 libsystem_pthread.dylib 0x00007fffdc8e91fd thread_start + 13
)
这可能吗?因为消息已经发送,并且由于收件人地址错误而导致崩溃。启用NSZombie
没有帮助-代码在没有其他有用信息的情况下在同一点崩溃
查看和回溯,我是否应该问自己“哪个对象已添加到自动释放池,但已手动/提前解除分配?”以找出问题 不要使用
po[NSThread callStackSymbols]
在调试器中获取回溯,只需使用bt
。您似乎没有在objc\u msgSend()
或类似程序中崩溃,因此链接的文章并不直接相关。您是否尝试过使用Zombies模板在仪器中运行,而不是手动启用容易出错的NSZombie
?除了释放bug后使用之外,您可能还有一个内存粉碎器。你可以试试。我想是启用了NSZombie检测的工具。不幸的是,它没有显示任何内容,让应用程序崩溃。
po [(id)$rdi class]
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x40dedeadbec8).
The process has been returned to the state before expression evaluation.