GDB でコアダンプの原因を探る

プログラム実行中に Segmentation Fault や Bus Error などで Core dumped となった場合、
core ファイル(または *.core)が作業ディレクトリに出力されます。
 
これを解析する場合, GDB(GNU Project Debugger)コマンドが有用です。

$ gdb <コアダンプした実行可能バイナリ> <コアダンプファイル>

例えば以下の perl のスクリプト(仮に foo.pl とします)の実行中にコアダンプした場合..

#!/bin/perl
 
# 何かの処理
 

この場合はスクリプト(foo.pl)ではなく、実際にコアダンプしたバイナリプログラム(/bin/perl)について gdb を実行します。

$ gdb /usr/bin/perl core
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-unknown-freebsd”…Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 2627 in elfstab_build_psymtabs
Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 933 in fill_symbuf
 
Core was generated by `perl’.
Program terminated with signal 11, Segmentation Fault.
 
以下ライブラリ読み込み、エラー箇所表示が続く

 
具体的なトレースの仕方については参考サイト参照のこと。
 
参考:
gdbを用いたデバッグ
  core ダンプ解析方法を含む GDB によるデバッグの基本が分かりやすく書かれています。
 
Debugging with GDB(日本語)
  GDB 公式ドキュメント日本語訳