gbd调试

基本调试思想:分析现象->假设错误原因->产生新的现象去验证假设。

gdb可以完全操控程序的运行,可以控制程序的运行过程,并且可以随时查看程序中所有的内部状态(各变量的值、传递给函数的参数、当前执行的语句位置等)。

生成gdb可调试代码:

1
gcc -g main.c -o main

基本命令:

1
2
3
4
5
6
7
8
9
gdb main 	# 开始调试
list 1 #从第一行开始显示源码, 后面再展开用l(小写的L);
break 52 #在第52行设置断点;
run #开始执行, 到断点暂停;
next #下一个, 转到下一条语句或函数;
step #单步, 进入函数, 单步执行, 注意系统函数只能用n, 不要用s进入;
print i #打印变量i的值;
continue #继续执行断点后续指令;
quit #退出gdb调试工具;

用gdb调试段错误: 直接run, 程序停止的位置就是出段错误的位置

栈帧:随着函数调用而在stack上开辟的一块内存空间, 用于存放函数调用时产生的局部变量和临时值

其他命令:

1
2
3
4
5
6
7
8
9
10
11
start		#单步执行;
finish #结束当前函数调用, 返回调用点;
set args aa bb cc #给函数添加参数, 或者`run aa bb cc`;
info b #查看断点信息;
b 20 if i=5 #设置条件断点;
ptype arr #查看变量类型;
backtrace #简称bt查看函数调用的栈帧和层级关系;
frame 1 #切换函数栈帧;
display j #一直显示j变量;
undisplay num #取消监视;
delete #删除断点;