間違いだらけの備忘録

このページの内容は無保証でありこのページの内容によって直接、または間接に損害を受けられたとしても私は責任を取りません。

Cのバックトレース

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
このページにはhatena以外のサービスからのコンテンツが埋め込まれています。 hatenaによりGoogle AdSense 広告が埋め込まれています。