这是一个实时MMO客户端,在某个随机点上,它将跳转为0崩溃,并且堆栈帧不可读。崩溃报告器(和GDB)将报告线程0崩溃:
XC_BAD_ACCESS (SIGBUS)
KERN_PROTECTION_FAILURE at 0x0000000000000000
和
srr0=lr=exception address=0
如何捕获此错误发生的地方?
最佳答案
如果您的堆栈指针(r1
)和链接寄存器被废弃,那么它看起来就不好了。但是,某些其他寄存器中仍有可能具有帧指针的值-例如,通常会看到非叶函数将地址移动到它们通过r0
返回到堆栈或从堆栈返回的地址。
除此之外,您还可以使用一些技巧-假设进程的地址空间中没有映射任何地址0x0
(看来是EXEC_BAD_ACCESS
错误的情况),您可以编写一个简单的预加载库,将页面零映射;这将允许您在0x0
处添加断点;这可能会给您更多有关发生的情况的信息。