Linux下的C++程序崩溃时打印崩溃信息
来源:互联网 发布:音乐后期制作软件手机 编辑:程序博客网 时间:2024/05/17 21:55
概述
在某些极端情况下,原本正常执行的程序发生了崩溃。这时候想通过调试是很难发现出错的地方的,所以在崩溃时打印出错点的调用堆栈是十分有必要的。
使用的命令: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 faultRegister dump: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 00007ffc56abf9a8 RSI: 00007ffc56abf998 RDI: 0000000000000001 RBP: 00007ffc56abf8b0 R8 : 00007f20269bce80 R9 : 00007f2026bd7560 R10: 00007ffc56abf740 R11: 00007f202661edd0 R12: 0000000000400400 R13: 00007ffc56abf990 R14: 0000000000000000 R15: 0000000000000000 RSP: 00007ffc56abf8b0 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: 00000000000000000000000000000000Backtrace:??:?(main)[0x4004fd]/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f202661eec5]??:?(_start)[0x400429]Memory map:00400000-00401000 r-xp 00000000 08:01 4736094 /home/jackripper/Desktop/test00600000-00601000 r--p 00000000 08:01 4736094 /home/jackripper/Desktop/test00601000-00602000 rw-p 00001000 08:01 4736094 /home/jackripper/Desktop/test01ee0000-01f05000 rw-p 00000000 00:00 0 [heap]7f20263e7000-7f20263fd000 r-xp 00000000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.17f20263fd000-7f20265fc000 ---p 00016000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.17f20265fc000-7f20265fd000 rw-p 00015000 08:01 1445862 /lib/x86_64-linux-gnu/libgcc_s.so.17f20265fd000-7f20267b8000 r-xp 00000000 08:01 1441892 /lib/x86_64-linux-gnu/libc-2.19.so7f20267b8000-7f20269b7000 ---p 001bb000 08:01 1441892 /lib/x86_64-linux-gnu/libc-2.19.so7f20269b7000-7f20269bb000 r--p 001ba000 08:01 1441892 /lib/x86_64-linux-gnu/libc-2.19.so7f20269bb000-7f20269bd000 rw-p 001be000 08:01 1441892 /lib/x86_64-linux-gnu/libc-2.19.so7f20269bd000-7f20269c2000 rw-p 00000000 00:00 07f20269c2000-7f20269c6000 r-xp 00000000 08:01 1441886 /lib/x86_64-linux-gnu/libSegFault.so7f20269c6000-7f2026bc5000 ---p 00004000 08:01 1441886 /lib/x86_64-linux-gnu/libSegFault.so7f2026bc5000-7f2026bc6000 r--p 00003000 08:01 1441886 /lib/x86_64-linux-gnu/libSegFault.so7f2026bc6000-7f2026bc7000 rw-p 00004000 08:01 1441886 /lib/x86_64-linux-gnu/libSegFault.so7f2026bc7000-7f2026bea000 r-xp 00000000 08:01 1441885 /lib/x86_64-linux-gnu/ld-2.19.so7f2026dca000-7f2026dcd000 rw-p 00000000 00:00 07f2026de7000-7f2026de9000 rw-p 00000000 00:00 07f2026de9000-7f2026dea000 r--p 00022000 08:01 1441885 /lib/x86_64-linux-gnu/ld-2.19.so7f2026dea000-7f2026deb000 rw-p 00023000 08:01 1441885 /lib/x86_64-linux-gnu/ld-2.19.so7f2026deb000-7f2026dec000 rw-p 00000000 00:00 07ffc56aa0000-7ffc56ac1000 rw-p 00000000 00:00 0 [stack]7ffc56ba7000-7ffc56ba9000 r-xp 00000000 00:00 0 [vdso]7ffc56ba9000-7ffc56bab000 r--p 00000000 00:00 0 [vvar]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
0 0
- Linux下的C++程序崩溃时打印崩溃信息
- linux c开发: 程序崩溃时保存堆栈信息并解析具体代码行
- linux c开发: 程序崩溃时保存堆栈信息并解析具体代码行
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- 程序崩溃时打印调用栈
- Android 采集程序的崩溃信息
- freebsd下保存内核崩溃时的信息
- 最短的崩溃的C程序
- 最短的C编译器崩溃程序
- C程序崩溃的常见原因
- Android程序崩溃 crash信息
- Linux 获取并分析程序崩溃时的调用堆栈
- Linux 获取并分析程序崩溃时的调用堆栈
- Linux 程序崩溃后的源码定位
- 动态加载表头
- 加载Obj文件并用OpenGL渲染注意问题
- 第十三周项目5:立体类族共有的抽象类
- |NOIOJ|二分|04:网线主管
- 学会编写Android Studio插件 别停留在用的程度了
- Linux下的C++程序崩溃时打印崩溃信息
- EditText中imeOptions属性使用及设置无效解决
- java8 ConcurrentHashMap
- 关于服务程序开发的几点注意事项
- SVM入门(一)至(三)Refresh
- iScroll 左右滑动获取索引
- vim编辑器的使用
- webview调用js
- 我的助理辞职了!——看完后大家对这篇文章应该很有感触