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

UNIX及UNIX-like环境下的调试工具gdb使用方法

准备工作

我们首先要将可执行程序变成debug版本。gcc编译器默认是release版本发布,那我们怎么将其变成debug版本呢?只需要在makefile文件中加上-g

debug版本和release版本的区别

先从文件大小初见端倪,debug版本的文件是要比release版本的文件大的

那我们具体如何在Linux环境下调试程序呢?

首先我们需要输入这样的一个命令:gdb+可调式程序名,注意这个程序必须是以debug版本发布的,也就是需要在makefile文件中用-g进行书写。

我们简写r,就可以直接运行程序(run),默认就是跑完了,但我们像调试的的话,需要打断点,那我们怎么打断点呢?

b + 行号就是给这一行打断点

如果有多文件,我们就是文件名+行号也是可以打的

info b用来查看断点

那如何删掉断点呢?

d 断点编号就是删除断点,注意这里的编号并不是行号,是断点的编号!

这里的第一列才是断点的编号

那我们如何禁用断点呢,禁用断点的意思就是,这个断点不使用了,但还会留下痕迹,跟VS编译器里面的空心断点是一样的

在Linux下我们采用disable 编号的形式进行禁用

再启用就是 enable 编号的形式

n 就是逐过程 F10

s 逐语句 F11

p :显示变量的内容和地址

display:变量名/去地址         常显示变量的内容和地址

那如果不想常显示呢?

undisplay + 编号,取消常显示变量的内容和地址

quit就是退出gdb调试

c:从一个断点运行到下一个断点(范围查找)

bt:查看调用堆栈

finish:将一个函数运行结束,就停下来(范围查找)VS编译器中就没有这个功能

until:在一定范围内,直接运行到指定行

set var name = value:修改一个变量的内容(不用改代码,多分枝测试)

总结:

肯定是没有VS图形化界面调试舒服,或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。


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

相关文章:

  • 6 加密技术与认证技术
  • Python基础知识:注释、变量以及数据类型、标识符和关键字、输入函数、输出函数、运算符、程序类型转换
  • 【玩转 Postman 接口测试与开发2_018】第14章:利用 Postman 初探 API 安全测试
  • 如何利用maven更优雅的打包
  • 电梯系统的UML文档14
  • 【初阶数据结构和算法】八大排序算法之插入排序(直接插入排序、希尔排序及其对比)
  • 【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
  • ES之三:springboot集成ES
  • Django+Vue家居全屋定制系统的设计与实现
  • chapter09-OOP高级部分——(单例模式)——day12
  • 【图灵完备 Turing Complete】游戏经验攻略分享 Part.3 存储器
  • Spring Boot如何解决跨域问题?
  • 区块链开发解决方案有哪些
  • 高防IP的作用有哪些?
  • 羲和能源大数据平台——Python数据绘图方法
  • 前端XSS 攻击与SQL注入 处理
  • 本地电脑交叉编译ffmpeg 到 windows on arm64
  • 机器学习课程学习周报十
  • Qlik数据集成 | Qlik 连续 14 年稳居 2024 Gartner® ABI Magic Quadrant™ 领导者
  • --- 数据结构 链表 --- java
  • pytorch pyro更高阶的优化器会使用更高阶的导数,比如二阶导数(Hessian矩阵)
  • Verilog基础,原码,反码与补码的概念
  • 【面试八股总结】MySQL 锁:全局锁、表级锁、行级锁
  • 国产游戏行业的崛起:技术挑战与未来机遇
  • Java | Leetcode Java题解之第393题UTF-8编码验证
  • 传递给 LEFT 或 SUBSTRING 函数的长度参数无效