我有一个核心转储,显示在执行mov %r15d,0xa0(%rsp)
时从SIGBUS信号中死亡的线程。这似乎告诉我它死了,因为它用完了线程堆栈。
但我怎么能证明呢?除了线程回溯之外,我似乎无法找到显示线程信息的GDB命令。在这种情况下,没有回溯。它显示当前功能,然后显示0x0000000000000000。我认为是堆栈损坏的另一个迹象。
程序死亡时,我没有/ proc / [pid] / maps的副本。有没有GDB或核心文件中的任何内容我可以查看每个线程堆栈的基础?
答案 0 :(得分:1)
这似乎告诉我它死了,因为它用完了线程堆栈。
非常可能
但我怎么能证明呢?
(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
段的({1}})位于load15
段的(低)端,并且没有“覆盖”$rsp-8
的映射