GDB断点调试
1 、安装GDB
sudo apt-get install gdb
2 、怎么打断点
1 、源文件的某一行设置断点
break 行号
2、一个特定的函数设置断点
break 函数名
3、设置条件断点
break 行号 if 条件
3、举例分析
hello2.c源文件如下
#include<stdio.h>
int main() {
int a = 1, b = 2, c = 3;
int i;
printf("hello chenyu");
for (i = 0 ; i < 100; i++) {
++a;
if (i > 90) {
++b;
} else {
++c;
}
}
printf("a = %d, b = %d, c = %d", a, b, c);
int cc = 0;
for (cc; cc < 9; cc++) {
printf("c %d", i);
}
return 0;
}
1、编译
gcc -g hello2.c
gdb hello2
3、显示代码行数命令如下
list
4 、然后输入下面打断点命令
break 10
break 18
图片如下:
5 、 运行并且跳转到断点
1、运行
start
c
程序就到到++b 这行来,上面2个步骤也可以用这个run (简写 r)命令代码
r
我们这里代码会跳到这个断点里面来,我么就避免了手动循环这么多次,因为这个断点会打很多次,所以我们可以用c命令,还是会在这行,所以打断点一般不要打在循环里面,当这个代码执行完之后,我们再用c命令,就会打印18行的代码
我们也可以用watch命令来观察变量,如果变量的值发生变化,程序就会停止
watch b
i locals
p c
进入函数内部用下面命令
s
n
删除断点
delete 行号
quit
4、如何保存断点
有时候运行时,上次打的断点没了,怎么保存呢?
1、查看断点信息并保存
info b
2 、保存断点
save breakpoint fig.dp
3、调试时候读取保存断点文件
gdb hello2 -x fig.dp
然后再去查看是否有断点
info b
可以看到是有2个断点的
5、总结
学会了gdb打断点的基本命令,还有一些调试手段,以及断点的保存。