C/C++のコードがセグメンテーションフォールト(セグフォ)で落ちる場合、突然プロセスが死ぬのでどこで問題が発生したのか分かりにくいです。そんなときに有効な手がかりとなるのがコアダンプです。
コアダンプを出力する設定 (ulimitコマンド)
$ ulimit -c unlimited
これを /etc/profile に記述しておけば再起動後も有効
GDBでコアダンプの解析
$ gdb hoge core
おもなGDBのコマンド
- backtrace : 関数の呼び出し順表示 短縮形は bt
- frame n : backtraceで表示された関数のn番目に移動
- info locals : ローカル変数の一覧表示
- info args : 引数の一覧表示
- print val : 変数valの値表示
- directory : ソースのディレクトリを指定
コアダンプの出力先変更
$ echo /tmp/core > /proc/sys/kernel/core_pattern