1、设置程序生成debug信息,通常会产生app.debug文件;
2、在Linux命令行中开启程序Crashed的时候产生dump文件:
# ulimit -c unlimited #只对当前shell进程有效
或在~/.bashrc 的最后加入: ulimit -c unlimited (一劳永逸)
设置dump文件大小为100k,输入ulimit -c 100,默认是unlimited无限制,产生的dump文件会比较大。有时候需要使用root权限来设置。
3、在命令行输入gdb命令进行调试:
# gdb ./app ./dump
或# gdb ./app --core=./dump
app为程序名称,dump为产生的dump文件名称,默认情况下会在程序所在的目录产生core.xxx类型的dump文件,每次产生的数字编号都会不一样,如core.956,core10125等。
4、在输出的内容中找到类似的中断错误描述:
Program terminated with signal 11, Segmentation fault.
#0 SDK_SimulatorTrigger () at ../../CameraSDK/camera/camerasdk.cpp:95
95 strcpy(ptr, "heel");
#后面是异常发生的源代码文件名称,95是代码行号,后面是具体的语句。
5、常用的gdb调试器命令:
1.按下两次tab键,选择Y,#列出所有命令
2.break命令显示中断位置所在的源码文件和代码行号
3.list 100显示当前中断源码文件的代码行95~104,再次回车,接着显示后面的代码
4.bt命令等于info stack命令,查看程序调用堆栈列表
5.info命令,输入info回车,可以查询很多有用的信息,比如查询调用堆栈info stack,当前线程信息info threads等。
6、输入quit或!退出gdb调试,输入help显式帮助文件