gdb调试工具详解

一、知识铺垫

1、程序的发布方式有两种,debug模式和release模式

2、gcc/g++形成的可执行程序默认是release模式

3、要使用gdb调试,必须在源代码生成可执行程序的时候, 加上 -g 选项

命令:gcc test.c -o test -g

 

很明显可以看出debug模式下的文件比release模式下的文件要大 

4、读取可执行程序的数据段格式命令:readelf -S + 可执行程序名

 

对比release模式,很明显debug模式下多出来了许多调试信息

 二、gdb的使用

用于调试的代码 

  #include <stdio.h>
   
  int AddToTop(int top)
  {
    int res = 0;
    for(int i = 1; i <= top; i++)
    {
      res += i;
    }
    return res;
  }
  
  int main()
  {
    int top = 100;
  
    int result = AddToTop(top);
  
    printf("result:%d\n", result);
                                                                                                                                                                                          
    return 0;
  }

 1、启动gdb

gdb + 可执行程序

或者

gdb -q + 可执行程序

-q选项可以屏蔽一些gdb版本等相关信息。

 2、退出gdb

可以输入quit进行退出,也可以使用快捷键Ctrl+d

 3、显示代码

输入list或者l即可显示代码,一次显示10行代码

gdb会记录最近一次的命令,如果命令无变化,可以直接回车

 

list/l 行号:接着上次的位置往下列,每次列10行。
ist/l 函数名:列出某个函数的源代码。

 4、运行程序

 输入run或者r开始运行程序,如果有断点则运行到断点处,如果没有断点,就直接运行结束。

5、断点相关命令

break/b + 行号:在某一行设置断点

break/b + 函数名:在某个函数开头设置断点 


  info b:查看断点信息


 d/delete + 断点编号:删除断点

断点编号是在查看断点信息中的Num值。

 6、调试程序时的相关命令

 n/next:逐过程,相当于VS2022中的F10

 

它会跳过空行,直接跳到有代码的那一行


p/print + 变量名:打印变量内容


s/step:逐语句,相当于VS2022中的F11 


bt/breaktrace:查看当前的调用堆栈


finish:将当前函数跑完就停下来 


display + 变量名: 跟踪查看一个变量,每次停下来都显示它的值

undisplay + 编号:取消对先前设置的那些变量的跟踪


until + 行号:跳转至指定行

 


continue/c:运行至下一个断点处停下来 

类似于你在VS2022上打了多个断点,按F5就可以运行到各个断点处。


disable + 断点编号:禁用断点
enable + 断点编号:启用断点

执行这个命令并不会删除断点,只是断点使不使能的问题。


set var + 变量名:设置该变量为某个值 

 

这次的分享就到这里了,觉得有所收获的话,就给博主三连吧,创作不易,你的支持将是我的动力 

谢谢!!! 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值