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