セグメントエラーのデバッグ

コンパイルオプション -g を追加してコンパイル

$ gcc test.c -g -o test

生成するコアダンプのリミットを無制限にする

$ ulimit -c unlimited

確認
$ cat /proc/%%プロセスID%%/limits

再現させる。

$ ./test
セグメンテーション違反です (core dumped)

コアダンプファイル(core.%%プロセスID%%)が生成される。 ※emacs上のshellだと作成されない(か他の場所に出来る?)

$ ls core*
core.26253

gdbで発生場所を確認する。

$ gdb test core.26253
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
....
warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/i686/cmov/librt.so.1...done.
Loaded symbols for /lib/i686/cmov/librt.so.1
....
Loaded symbols for /usr/lib/gtk-2.0/2.10.0/engines/libcrux-engine.so
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
[New process 26253]
[New process 26274]
[New process 26272]
#0  0x080594da in Common::AppWindow::CheckIdleTimer (this=0x8091cc0)
    at ../raspi_tools2/fwgtk2/AppWindow.h:331
331       if (e->enable) {

後は直すだけ。

稼働中のプロセスにcoreを吐かせるのは

$ gcore %%プロセスID%%

参考