Linux至GDB调试教程

1 、安装GDB

[html]  view plain  copy
 print ?
  1. sudo apt-get install gdb  

2 、怎么打断点

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

[html]  view plain  copy
 print ?
  1. break 行号  

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

[html]  view plain  copy
 print ?
  1. break 函数名  

3、设置条件断点

[html]  view plain  copy
 print ?
  1. break 行号 if 条件  

3、举例分析

hello2.c源文件如下

[html]  view plain  copy
 print ?
  1. #include<stdio.h>  
  2.   
  3. int main() {   
  4.    int a = 1b = 2c = 3;  
  5.    int i;  
  6.    printf("hello chenyu");    
  7.    for (i = 0 ; i < 100; i++) {  
  8.         ++a;  
  9.         if (i > 90) {  
  10.             ++b;  
  11.         } else {  
  12.             ++c;  
  13.         }  
  14.    }   
  15.    printf("a = %d, b = %d, c = %d", a, b, c);  
  16.    int cc = 0;  
  17.    for (cc; cc < 9; cc++) {  
  18.         printf("c %d", i);  
  19.    }  
  20.    return 0;  
  21. }  

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

1、编译

[html]  view plain  copy
 print ?
  1. gcc -g hello2.c  

2、gdb调试

[html]  view plain  copy
 print ?
  1. gdb hello2  

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

[html]  view plain  copy
 print ?
  1. list  
3次回车

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

[html]  view plain  copy
 print ?
  1. break 10  
  2.   
  3. break 18  

图片如下:


5 、 运行并且跳转到断点

1、运行

[html]  view plain  copy
 print ?
  1. start  

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

[html]  view plain  copy
 print ?
  1. c  

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

[html]  view plain  copy
 print ?
  1. r  

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

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

[html]  view plain  copy
 print ?
  1. watch b  

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

[html]  view plain  copy
 print ?
  1. i locals  
  2.   
  3. p c  

进入函数内部用下面命令

[html]  view plain  copy
 print ?
  1. s  

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

[html]  view plain  copy
 print ?
  1. n  

删除断点

[html]  view plain  copy
 print ?
  1. delete 行号  

退出gdb命令

[html]  view plain  copy
 print ?
  1. quit  

4、如何保存断点

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

1、查看断点信息并保存

[html]  view plain  copy
 print ?
  1. info b  

2 、保存断点

[html]  view plain  copy
 print ?
  1. save breakpoint fig.dp  

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

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

[html]  view plain  copy
 print ?
  1. gdb hello2 -x fig.dp  

要记住加上参数 -x 

然后再去查看是否有断点

[html]  view plain  copy
 print ?
  1. info b  

可以看到是有2个断点的

5、总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值