1

の実行中にスレッドが SIGBUS シグナルで死んでいることを示すコア ダンプがありますmov %r15d,0xa0(%rsp)。スレッドスタックを使い果たしたために死亡したようです。

しかし、どうすればそれを証明できますか?スレッド バックトレース以外にスレッド情報を表示する GDB コマンドが見つからないようです。この場合、バックトレースはありません。現在の関数が表示され、次に 0x0000000000000000 が表示されます。スタックの破損のさらに別の兆候だと思います。

プログラムが終了したときの /proc/[pid]/maps のコピーがありません。GDB またはコア ファイルに、各スレッド スタックのベースを見つけるために参照できるものはありますか?

4

1 に答える 1

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がセグメントの (ロー) エンドにあることに注意してくださいload15。「カバー」するマッピングはありません。$rsp-8

于 2012-09-28T22:40:07.233 に答える