Bootstrap

gdb的调试方法

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 非库函数,则直接定位到异常位置

;