当前位置: 首页 > article >正文

【Linux】工具(5)——gdb

今天我们来到Linux工具的最后一篇博客:gdb的使用

目录

一、Linux下的release和debug

二、gdb常用指令选项


一、Linux下的release和debug

我们先来写一个Makfile,来方便我们编译代码:

再来写一个test.c的源文件:

接着我们使用make来编译一下源文件:
编译
可以看到编译没有通过
这是因为当前gcc编译的标准不支持在for循环中定义变量,但是我们可以在gcc指令后面加上-std=c99就可以按照c99的标准来编译代码:

 接着我们再使用make来编译一下:

 

 编译完成生成了运行文件,我们来运行一下:

 光运行已经不能满足我们了,我们需要进行调试,这时就轮到gdb上场了,具体使用方法:

gdb  要调试的可执行文件

我们现在试了一下,发现并不能正常调试,主要是缺少了调试信息:

这是因为在Linux环境下gcc/g++默认编译的代码是release版本

debug版本:程序本身会被加入更多的调试信息 以便于进行调试

release版本:不会添加任何调试信息 是不可调试的

我们在linux中默认生成的文件都是release版本的 是不可以使用gbd调试的

如果我们想要它可被调试则需加入debug信息

具体指令如下:

gcc test.c -g -o test_debug.exe -std=c99

 即在gcc指令上加上-g选项即可(表示生成debug版本的可执行程序)

我们可以发现debug版本的可执行程序比release版本的可执行程序大一些,这是因为debug版本的含有调试信息

下面我们再来使用gdb进行调试:

 这时就成功了

二、gdb常用指令选项

【l 行号】:显示binFile源代码,接着上次的位置往下列,每次列10行。

【l 函数名】:列出某个函数的源代码。

【r】:从头开始连续而非单步执行程序

【n】:单条执行

【s】:进入函数调用

【c】:从当前位置开始连续而非单步执行程序

【b 行号】:在某一行设置断点

【b 函数名】:在某个函数开头设置断点

【info b】 :查看所设置的断点信息

【finish】:执行到当前函数返回,然后挺下来等待命令

【p 变量名】:打印变量值

【set variable 变量名】:修改变量的值

【delete breakpoints】:删除所有断点

【delete breakpoints n】:删除序号为n的断点

【disable breakpoints n】:禁用序号为n的断点(禁用后该断点不起作用,但并没有删除)

【enable breakpoints n】:启用序号为n的断点

【display 变量名】:跟踪查看一个变量,每次停下来都显示它的值(变量常显示)

【undisplay 变量名】:取消对先前设置的那些变量的跟踪

【until 行号】:运行至所给行号处停下

【bt】:查看各级函数调用及参数

【info locals】:查看当前栈帧局部变量的值

【q】:退出gdb


感谢各位的阅读,我们下一期见


http://www.kler.cn/a/9797.html

相关文章:

  • python openai 关于会话管理问题(二)
  • PDS的主要部件
  • stm32mp2 RMII phy调试总结
  • Flutter中的Extension关键字
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • Web 开发新趋势下,GET 请求与 POST 请求如何抉择
  • 浏览器:好用的浏览器插件,亲测好用
  • 分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
  • Quaternion插值方法
  • FFMPEG VCL Pack Crack显示位置支持或光标
  • 是面试官放水,还是公司实在是太缺人?这都没挂,字节原来这么容易进...
  • 【并发编程】异步编程CompletableFuture实战
  • MySQL开发05-MySQL开发规范
  • 分布式文件系统FastDFS
  • android framework实战车机手机系统开发环境相关问题补充
  • 为什么提升客户服务是长期成功的关键
  • 高精度尘埃粒子计数器工厂空气质量监测必备
  • FreeRTOS 列表和列表项
  • java equals和==的区别
  • 自由度的理解
  • SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表
  • ChatGTP如此强大,我们普通人如何利用它来赚钱?
  • 小程序页面跳转方法
  • SpringSecurity+OAUTH2集成多种登录方式
  • 穿越不确定性,Serverless已翻过千山万水
  • Mybatis(五)------Mybatis执行Mapper接口的方法流程