您的位置:首页 > 运维架构 > Linux

linux c之gdb常用断点调试总结

2016-12-29 20:13 260 查看

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;
}


比如我们在 ++b (第10行)这行和printf("c %d", i)(第18行)这两行打断点命名如下

1、编译

gcc -g hello2.c


2、gdb调试

gdb hello2


3、显示代码行数命令如下

list
3次回车

4 、然后输入下面打断点命令

break 10

break 18

图片如下:



5 、 运行并且跳转到断点

1、运行

start


2 、跳转到断点命令(countine 简写c)

c

程序就到到++b 这行来,上面2个步骤也可以用这个run (简写 r)命令代码

r




我们这里代码会跳到这个断点里面来,我么就避免了手动循环这么多次,因为这个断点会打很多次,所以我们可以用c命令,还是会在这行,所以打断点一般不要打在循环里面,当这个代码执行完之后,我们再用c命令,就会打印18行的代码



我们也可以用watch命令来观察变量,如果变量的值发生变化,程序就会停止

watch b


我么看变量的值或则单个变量的值可以用下面命令

i locals

p c




进入函数内部用下面命令

s


单步调试往下执行用下面命令

n


删除断点

delete 行号


退出gdb命令

quit


4、如何保存断点

有时候运行时,上次打的断点没了,怎么保存呢?

1、查看断点信息并保存

info b




2 、保存断点

save breakpoint fig.dp


断点保存在fig.dp文件里面

3、调试时候读取保存断点文件

gdb hello2 -x fig.dp


要记住加上参数 -x

然后再去查看是否有断点

info b



可以看到是有2个断点的

5、总结

       学会了gdb打断点的基本命令,还有一些调试手段,以及断点的保存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: