这是一个实时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处添加断点;这可能会给您更多有关发生的情况的信息。

10-05 23:48