如何从核心文件中找到线程的堆栈基础?

时间:2012-09-28 22:07:14

标签: linux debugging gdb core

我有一个核心转储,显示在执行mov %r15d,0xa0(%rsp)时从SIGBUS信号中死亡的线程。这似乎告诉我它死了,因为它用完了线程堆栈。

但我怎么能证明呢?除了线程回溯之外,我似乎无法找到显示线程信息的GDB命令。在这种情况下,没有回溯。它显示当前功能,然后显示0x0000000000000000。我认为是堆栈损坏的另一个迹象。

程序死亡时,我没有/ proc / [pid] / maps的副本。有没有GDB或核心文件中的任何内容我可以查看每个线程堆栈的基础?

1 个答案:

答案 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的映射