LinuxでのC++プログラムのクラッシュ時にクラッシュ情報を印刷
12588 ワード
概要
極端な場合、正常に実行されていたプログラムがクラッシュします.この場合,デバッグではエラー箇所を発見することは困難であるため,クラッシュ時にエラー点の呼び出しスタックを印刷する必要がある.
使用するコマンド:
テスト
次のC++コード(test.cpp)があります.
極端な場合、正常に実行されていたプログラムがクラッシュします.この場合,デバッグではエラー箇所を発見することは困難であるため,クラッシュ時にエラー点の呼び出しスタックを印刷する必要がある.
使用するコマンド:
catchsegv program [args]
例えば、我々のプログラムがtestである場合、コンソール入力:catchsegv ./test
gcc/g++を使用してtestをコンパイルする際に-gオプション(すなわち、実行可能プログラムにデバッグ情報を追加)が追加された場合、クラッシュしたコード行数を出力することができる.テスト
次のC++コード(test.cpp)があります.
int main()
{
int* nInt = 0;
*nInt = 0; // crash
return 0;
}
g++ test.cpp -o test -g
を使用してこのセグメントC++コードをコンパイルし、test実行可能プログラムを生成します.コンソールでcatchsegv ./test
を実行すると、次のような出力があります(注意Backtrace:
の下).Segmentation fault (core dumped)
*** Segmentation fault
Register dump:
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
RDX: 00007fff296866f8 RSI: 00007fff296866e8 RDI: 0000000000000001
RBP: 00007fff29686600 R8 : 00007f0072412e80 R9 : 00007f007262d700
R10: 00007fff29686490 R11: 00007f0072070e50 R12: 0000000000400400
R13: 00007fff296866e0 R14: 0000000000000000 R15: 0000000000000000
RSP: 00007fff29686600
RIP: 00000000004004fd EFLAGS: 00010246
CS: 0033 FS: 0000 GS: 0000
Trap: 0000000e Error: 00000006 OldMask: 00000000 CR2: 00000000
FPUCW: 0000037f FPUSW: 00000000 TAG: 00000000
RIP: 00000000 RDP: 00000000
ST(0) 0000 0000000000000000 ST(1) 0000 0000000000000000
ST(2) 0000 0000000000000000 ST(3) 0000 0000000000000000
ST(4) 0000 0000000000000000 ST(5) 0000 0000000000000000
ST(6) 0000 0000000000000000 ST(7) 0000 0000000000000000
mxcsr: 1f80
XMM0: 00000000000000000000000000000000 XMM1: 00000000000000000000000000000000
XMM2: 00000000000000000000000000000000 XMM3: 00000000000000000000000000000000
XMM4: 00000000000000000000000000000000 XMM5: 00000000000000000000000000000000
XMM6: 00000000000000000000000000000000 XMM7: 00000000000000000000000000000000
XMM8: 00000000000000000000000000000000 XMM9: 00000000000000000000000000000000
XMM10: 00000000000000000000000000000000 XMM11: 00000000000000000000000000000000
XMM12: 00000000000000000000000000000000 XMM13: 00000000000000000000000000000000
XMM14: 00000000000000000000000000000000 XMM15: 00000000000000000000000000000000
Backtrace:
/home/jackripper/Desktop/Test.cpp:7(main)[0x4004fd]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f0072070f45]
??:?(_start)[0x400429]
Memory map:
00400000-00401000 r-xp 00000000 08:01 4723165 /home/jackripper/Desktop/Test
00600000-00601000 r--p 00000000 08:01 4723165 /home/jackripper/Desktop/Test
00601000-00602000 rw-p 00001000 08:01 4723165 /home/jackripper/Desktop/Test
01ab6000-01adb000 rw-p 00000000 00:00 0 [heap]
7f0071e39000-7f0071e4f000 r-xp 00000000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f0071e4f000-7f007204e000 ---p 00016000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f007204e000-7f007204f000 rw-p 00015000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f007204f000-7f007220d000 r-xp 00000000 08:01 1443885 /lib/x86_64-linux-gnu/libc-2.19.so
7f007220d000-7f007240d000 ---p 001be000 08:01 1443885 /lib/x86_64-linux-gnu/libc-2.19.so
7f007240d000-7f0072411000 r--p 001be000 08:01 1443885 /lib/x86_64-linux-gnu/libc-2.19.so
7f0072411000-7f0072413000 rw-p 001c2000 08:01 1443885 /lib/x86_64-linux-gnu/libc-2.19.so
7f0072413000-7f0072418000 rw-p 00000000 00:00 0
7f0072418000-7f007241c000 r-xp 00000000 08:01 1443877 /lib/x86_64-linux-gnu/libSegFault.so
7f007241c000-7f007261b000 ---p 00004000 08:01 1443877 /lib/x86_64-linux-gnu/libSegFault.so
7f007261b000-7f007261c000 r--p 00003000 08:01 1443877 /lib/x86_64-linux-gnu/libSegFault.so
7f007261c000-7f007261d000 rw-p 00004000 08:01 1443877 /lib/x86_64-linux-gnu/libSegFault.so
7f007261d000-7f0072640000 r-xp 00000000 08:01 1443901 /lib/x86_64-linux-gnu/ld-2.19.so
7f0072818000-7f007281b000 rw-p 00000000 00:00 0
7f007283d000-7f007283f000 rw-p 00000000 00:00 0
7f007283f000-7f0072840000 r--p 00022000 08:01 1443901 /lib/x86_64-linux-gnu/ld-2.19.so
7f0072840000-7f0072841000 rw-p 00023000 08:01 1443901 /lib/x86_64-linux-gnu/ld-2.19.so
7f0072841000-7f0072842000 rw-p 00000000 00:00 0
7fff29668000-7fff29689000 rw-p 00000000 00:00 0 [stack]
7fff29797000-7fff29799000 r--p 00000000 00:00 0 [vvar]
7fff29799000-7fff2979b000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]