1 发行版本和开发版本
1.1 生成命令
- 一步生成
gcc -o main main.c #生成release版本
gcc -o debug main.c -g #生成debug版本
- 分步生成
- 编译期加入debug
- 后续直接继续生成
gcc -c main.c -g #编译期加入debug
gcc -o main main.o #继续生成
- 显示section header信息
- 开发版本多了 debug_* 段
readelf -S main
readelf -S debug
2 gdb调试
2.1 下断点
gdb debug
l #默认显示main函数所在文件的源代码
list file_name:num #显示file_name文件num行附近的源代码
b line_num #num行加断点
b function_name #指定函数加断点
b file_name:line_num #给file_name文件num行加断点
b line_num if 条件 #条件断点
info b #显示断点信息
d bpnum #删除断点
disable bpnum #断点无效
enable bpnum #断点生效
2.2 调试过程命令
r #启动调试
n #执行下一步
s #进入函数内部
finish #退出函数
c #继续运行到下一个断点
q #退出调试
2.3 查看命令
p val_name #查看变量的值
p &val_name #查看变量的地址
p *ptr #查看指针指向地址存储的值
p arr #查看数组中的所有元素
p *ptr@num #查看ptr数组中的num个元素
p struct_val #查看结构体变量中所有成员的值
p struct_val.a #查看结构体变量中某个成员的值
p struct_ptr->a #查看指针指向的结构体变量中某个成员的值
p function_name(a,b) #查看函数通过给定参数运行的结果
bt #查看函数调用栈(函数调用流程)