我有一个核心转储,显示线程在执行时因 SIGBUS 信号而死机mov %r15d,0xa0(%rsp)
。这似乎告诉我它死了,因为它用完了线程堆栈。
但是我怎么证明呢?除了线程回溯之外,我似乎找不到显示线程信息的 GDB 命令。在这种情况下,没有回溯。它显示当前函数,然后显示 0x0000000000000000。我认为,堆栈损坏的另一个迹象。
我没有 /proc/[pid]/maps 程序死亡时的副本。我可以查看 GDB 或核心文件中的任何内容以查找每个线程堆栈的基础吗?
这似乎告诉我它死了,因为它用完了线程堆栈。
很可能
但是我怎么证明呢?
(gdb) p/x $rsp
$1 = 0x7fffc5791000
(gdb) info target
Symbols from "a.out".
Local core dump file:
`core', file type elf64-x86-64.
0x0000000000400000 - 0x0000000000401000 is load1
...
0x00007faaf2240000 - 0x00007faaf2241000 is load14
0x00007fffc5791000 - 0x00007fffc5f91000 is load15
0x00007fffc5faf000 - 0x00007fffc5fb0000 is load16
0xffffffffff600000 - 0xffffffffff600000 is load17
Local exec file:
...
注意段$rsp
的(低)端如何load15
,并且没有“覆盖”的映射$rsp-8