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

1 、安装GDB

sudo apt-get install gdb

2 、怎么打断点

1 、源文件的某一行设置断点

break 行号

2、一个特定的函数设置断点

break 函数名

3、设置条件断点

break 行号 if 条件

3、举例分析

hello2.c源文件如下

#include

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

图片如下:

linux c之gdb常用断点调试总结_第1张图片

5 、 运行并且跳转到断点

1、运行

start

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

c

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

r

linux c之gdb常用断点调试总结_第2张图片

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

linux c之gdb常用断点调试总结_第3张图片

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

watch b

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

i locals

p c

linux c之gdb常用断点调试总结_第4张图片

进入函数内部用下面命令

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
linux c之gdb常用断点调试总结_第5张图片

可以看到是有2个断点的

5、总结

       学会了gdb打断点的基本命令,还有一些调试手段,以及断点的保存。

你可能感兴趣的:(Linux,C/C++)