1、编译代码的时候加上 -g 选项允许目标程序可以调试运行
-o 选项允许目标程序名称改为xxx.out,默认是 a.out
gcc xxx.c -g -o xxx.out
2、以gdb方式启动调试代码
gdb xxx.out 或 gdb a.out
3、如果出现 (gdb) 表示调试器启动成功;
否则出现 no debugging symbols found
4、有如下调试命令
(gdb) l ===>列出当前要调试的目标程序的代码
(gdb) ENTER ===>默认执行上次命令
(gdb) b 20 ===>在代码的第20行位置加入一个断点
b main ==>在代码的main函数位置加入一个断点
b xxx.c:30 ==>在其他代码文件的指定位置加入一个断点
info b ===>可以查看所有断点的设置情况
(gdb) r ===>开始执行代码,默认会执行到第一个断点位置
r xx yy ===>带参数执行目标程序
(gdb) s ====>单步跟踪指令,见到函数跟踪到函数内部
n ====>单步跟踪指令,见到函数不进入函数内部
c ====>直接运行到下一个断点位置
f ====>直接执行到结束
(gdb) p xx ==>查看某个变量的值
(gdb) q ===>结束本次调试过程
调试段错误的快捷方法:
0、先将目标程序用 -g 选项编译加入调试信息
1、在段错误发生问题的终端环境下 ulimit -c unlimited
2、执行有问题的代码,并到段错误出现,最终会在当前目录生成 core 文件
3、使用gdb 启动目标程序并加载core文件, gdb a.out core
4、可以直接找到目标段错误的位置,一般有如下两种可能
4.1 库函数调用失败异常 #0 位置后面标明异常的库函数
bt 指令可以查看当前的堆栈调用信息
4.2 非库函数,则直接定位到异常位置