セグメントエラーのデバッグ
$ 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%%