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

来源:互联网 发布:淘宝卖家怎么设置特价 编辑:程序博客网 时间:2024/04/28 22:23

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 10break 18

图片如下:


5 、 运行并且跳转到断点

1、运行

start

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

c

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

r

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

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

watch b

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

i localsp 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打断点的基本命令,还有一些调试手段,以及断点的保存。

0 0
原创粉丝点击