gdb代码调试
B站视频
基本环境搭建
基本代码结构 main.c
:
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("输出的参数数量有:%d\n",argc);
for (int i = 0; i < argc; i++)
{
printf("第 %d 个参数为:%s\n",i+1,argv[i]);
}
return 0;
}
非常简单的一段代码。gcc相关内容见这里
然后就是开始编译它:
gcc main.c -g -o main
-g
在代码中加入gdb的调试信息
开始调试
# 进入调试模式
gdb main
# 开始运行程序
r
# 退出调试模式
q
调试时指定传入参数
就是int main(int argc, char const *argv[])
中argc
和argv
这俩货。
set args 输入你想穿入的参数
# 然后开始运行
r
效果图:
查看源码
l 文件名:行号
l 文件名:函数名
默认的文件名就是你当前运行的文件
打断点
b 文件名:行号
b 文件名:函数名
同样,默认的文件名就是当前运行的文
b 行号 if 变量==值
这种就是条件断点,当满足后面设定的值时,断点才会生效。
查看所有打得断点
info b
命令
删除断点
d 断点编号
禁用某个断点
dis 断点编号
重新启用某个断点
ena 断点编号
查看某个变量的值
p 变量名
查看变量的类型
ptype 变量
让这个变量在调试过程中一直展示
display 变量
设置这个变量之后,只要代码停住,就会展示这个变量。
调试代码
-
n
,遇到函数不会进入函数体 -
step
,遇到函数会进入函数体 -
continue
,继续执行,直到停止到下一个断点位置 -
finish
,跳出函数体
修改变量的值
set var 变量=新的值
就可以通过这个命令,强制设定一些值
除了r
之外,启动调试的另一种方式
start
直接运行第一行代码