GDB断点调试

GDB断点调试

Posted by XT on October 1, 2018

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

图片如下:

img

5 、 运行并且跳转到断点

1、运行

start
c

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

r

img

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

img

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

watch b
i locals
p c

img

进入函数内部用下面命令

s
n

删除断点

delete 行号
quit

4、如何保存断点

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

1、查看断点信息并保存

info b

2 、保存断点

save breakpoint fig.dp

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

gdb hello2 -x fig.dp

然后再去查看是否有断点

info b

可以看到是有2个断点的

5、总结

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