http://namazu.org/~satoru/blog/archives/000067.html
追試してみた
環境
Debian 3.1 Sarge
libc6 2.3.2.ds1-22
Kernel 2.4.27
catchsegvは使えそう
gccでのコンパイル時に -gオプションをつけると
バックトレースはわかりやすくなるが、
ログ上にパス情報が出るのは良し悪しだな
LD_PRELOAD=/lib/libSegFault.so SEGFAULT_SIGNALS=all
についてはシンボル名までは出なかった。
が、
addr2lineにアドレスを渡してやれば、シンボル名が分かる
#ということがcatchsegvをbash -xしたら分かった
標準エラー出力ではなくファイルに出力する場合は
SEGFAULT_OUTPUT_NAMEを使用
http://www.mail-archive.com/ultralinux@vger.rutgers.edu/msg00367.html
export SEGFAULT_OUTPUT_NAME=/tmp/Xsun24.segv.$$
$ catchsegv ./a.out *** Floating point exception Register dump: EAX: 00000001 EBX: 40150880 ECX: 00000001 EDX: 00000000 ESI: 40016540 EDI: bffff674 EBP: bffff608 ESP: bffff604 EIP: 08048369 EFLAGS: 00010282 CS: 0023 DS: 002b ES: 002b FS: 0000 GS: 0000 SS: 002b Trap: 00000000 Error: 00000000 OldMask: 80000000 ESP/signal: bffff604 CR2: 00000000 Backtrace: /home/name/undernomal/test1.c:2(foo)[0x8048369] /home/name/undernomal/test1.c:7(main)[0x8048389] /lib/libc.so.6(__libc_start_main+0xc6)[0x40036e36] ../sysdeps/i386/elf/start.S:105(_start)[0x80482b1] Memory map: 08048000-08049000 r-xp 00000000 03:01 328342 /home/name/undernomal/a.out 08049000-0804a000 rw-p 00000000 03:01 328342 /home/name/undernomal/a.out 0804a000-0806b000 rwxp 00000000 00:00 0 40000000-40016000 r-xp 00000000 03:01 2859 /lib/ld-2.3.2.so 40016000-40017000 rw-p 00015000 03:01 2859 /lib/ld-2.3.2.so 40017000-40018000 rw-p 00000000 00:00 0 40018000-4001b000 r-xp 00000000 03:01 95875 /lib/libSegFault.so 4001b000-4001c000 rw-p 00002000 03:01 95875 /lib/libSegFault.so 40021000-40149000 r-xp 00000000 03:01 3581 /lib/libc-2.3.2.so 40149000-40151000 rw-p 00127000 03:01 3581 /lib/libc-2.3.2.so 40151000-40154000 rw-p 00000000 00:00 0 bfffe000-c0000000 rwxp fffff000 00:00 0
$ env | grep LD_ ; env | grep SEG LD_PRELOAD=/lib/libSegFault.so SEGFAULT_SIGNALS=all $ ./a.out *** Floating point exception Register dump:000 r-xp 00000000 03:01 328346 /home/name/undernomal/a2.out 08049000-0804a000 rw-p 00000000 03:01 328346 /home/name/undernomal/a2.out EAX: 00000001 EBX: 40150880 ECX: 00000001 EDX: 00000000 ESI: 40016540 EDI: bffff684 EBP: bffff618 ESP: bffff614 40016000-40017000 rw-p 00015000 03:01 2859 /lib/ld-2.3.2.so EIP: 08048369 EFLAGS: 000102860:00 0 40018000-4001b000 r-xp 00000000 03:01 95875 /lib/libSegFault.so CS: 0023 DS: 002b ES: 002b FS: 0000 GS: 0000 SS: 002b 40021000-40149000 r-xp 00000000 03:01 3581 /lib/libc-2.3.2.so Trap: 00000000 Error: 00000000 OldMask: 800000002.3.2.so ESP/signal: bffff614 CR2: 00000000 0 bfffe000-c0000000 rwxp fffff000 00:00 0 Backtrace:name:~/undernomal$ ./a.out[0x8048369] ./a.out[0x8048389] /lib/libc.so.6(__libc_start_main+0xc6)[0x40036e36] ./a.out[0x80482b1] Memory map: 08048000-08049000 r-xp 00000000 03:01 328342 /home/name/undernomal/a.out 08049000-0804a000 rw-p 00000000 03:01 328342 /home/name/undernomal/a.out 0804a000-0806b000 rwxp 00000000 00:00 0 40000000-40016000 r-xp 00000000 03:01 2859 /lib/ld-2.3.2.so 40016000-40017000 rw-p 00015000 03:01 2859 /lib/ld-2.3.2.so 40017000-40018000 rw-p 00000000 00:00 0 40018000-4001b000 r-xp 00000000 03:01 95875 /lib/libSegFault.so 4001b000-4001c000 rw-p 00002000 03:01 95875 /lib/libSegFault.so 40021000-40149000 r-xp 00000000 03:01 3581 /lib/libc-2.3.2.so 40149000-40151000 rw-p 00127000 03:01 3581 /lib/libc-2.3.2.so 40151000-40154000 rw-p 00000000 00:00 0 bfffe000-c0000000 rwxp fffff000 00:00 0 浮動小数点演算例外です (core dumped)
$ addr2line -f -e ./a.out 0x8048369 foo /home/user/undernomal/test1.c:2 $ addr2line -f -e ./a.out 0x8048389 main /home/user/undernomal/test1.c:7 $ addr2line -f -e ./a.out 0x80482b1 _start ../sysdeps/i386/elf/start.S:105