我的应用程序随机且很少因分段错误信号而崩溃。当在 GDB 中打开 coredump 时,可以看到以下内容:
导致崩溃的 arm 指令是:
0x7f8ea08130 fd 7b b7 a9 stp x29, x30, [sp,#-144]!
- 当在 GDB 中浏览崩溃帧的代码时,断点在打开函数的花括号时停止:
void SomeClass::someMethod(const std::string& s, int i)
>{
...
}
- 检查“sp”寄存器给出以下输出:
x $sp
>~"0x7fc761a070:\t0xc761a270\n"
x $sp-144\n"
>~"0x7fc7619fe0:\t"
>&"Cannot access memory at address 0x7fc7619fe0\n"
>169^error,msg="Cannot access memory at address 0x7fc7619fe0"
- 堆栈跟踪似乎很好并且没有损坏
- 堆栈中大约有 300 帧,堆栈大小限制设置为 8192K
UPD:系统中的pagesize为4k:
>grep -i pagesize /proc/1/smaps
KernelPageSize: 4 kB
MMUPageSize: 4 kB
我还能检查什么来调试这个问题?