【GDB调试-4】调试Release版本程序

一、Debug和Release

1.1 Debug版本

在软件开发过程中可以使用Debug版本软件进行调试,调试版本中包含很多调试信息,易于发现问题,如果出现问题,Debug版本软件所提供的调试信息可以帮助我们以最快的速度解决问题。

1.2 Release版本

当软件开发完成后,我们为了增加程序运行效率,此时会编译一个Release版本的程序,里面不包含调试信息,一旦出现问题之后我们想要对其进行调试,就没有那么容易了。

1.3 区别

下面是Release版本查看栈回溯的信息,由于没有符号信息,在输出的时候只打印了地址,无法直观的看到函数调用位置。
在这里插入图片描述
除此外,还包含优化等级的差异,将同样的程序编译成汇编代码之后就会体现出来,每一条汇编指令就对应了一条CPU指令,CPU按照对应的指令进行执行。

Debug模式下可以使用断言,但是在Release模式下断言无效,当条件不满足的时候继续往下执行。
在经过优化后,编译器可能会直接从寄存器中取值,而不从内存中进行取值。
在嵌入式系统中存储容量有限,调试版本可能无法保存到存储器中进行运行,下面是他们的对比:

-rwxrwxr-x  1 lhq lhq 83568 1120 15:15 debug
drwxrwxr-x 18 lhq lhq  4096 1118 17:47 EOS
-rw-rw-r--  1 lhq lhq   632 1119 22:41 main.cpp
-rwxrwxr-x  1 lhq lhq 25936 1120 15:14 release

从上面的对比来看,对程序进行优化后发布运行是非常有必要的。

二、使用GDB调试Release 版本程序

使用版本控制工具进行管理代码,每次发布一个版本在出问题之后都可以及时通过源码分析问题。
由于在Release版本中不包含调试信息,所以调试起来难度比较大,但是我们可以使用发行版本的源码生成一个携带调试信息的版本来进行调试。

第一种方式是从调试版本软件中提取符号表,利用Binutils工具获取符号表:

objcopy --only-keep-debug debug debug.symbol

获取到符号表后使用gdb指定符号文件:

gdb --symbol=debug.symbol -exec=release

加载成功之后就可以像debug版本一样设置断点和查看局部变量信息。
在这里插入图片描述
第二种方式是直接指定从调试版本中获取符号:

gdb --symbol=debug -exec=release

然后就可以像Debug版本一样使用了

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GDB是一种功能强大的调试器,用于帮助开发人员在软件开发过程中定位和修复程序中的错误。GDB有两个不同的版本:开发版本和发布版本。开发版本通常包含最新的功能和修复,而发布版本是为了稳定性和可靠性而经过测试和验证的版本。 发布版本的GDB是为了满足用户的需求而推出的。它经过详细的测试和验证,确保可以在各种操作系统和硬件平台上正常工作。发布版本通常是根据开发版本中的一些特定功能和修复进行选择和打包的。 发布版本的主要目的是向用户提供一个稳定可靠的调试器,以帮助用户更好地调试和优化他们的程序。这是通过从开发版本中选择和集成一些已经验证和稳定的功能和修复来实现的。此外,发布版本还提供了一些额外的文档,如用户手册和常见问题解答,以帮助用户更好地使用GDB。 发布版本的GDB通常以二进制形式提供,用户只需下载并安装即可使用。用户可以通过向开发者提供反馈来改善发布版本,并在后续的更新中获取新的功能和修复。发布版本的GDB可用于各种软件开发项目,包括嵌入式系统、服务器应用程序和桌面应用程序等。 总之,发布版本的GDB是一个经过测试和验证的稳定版本,旨在为用户提供一个可靠且功能丰富的调试器,以帮助他们调试和优化程序。用户可以下载并安装发布版本,然后从开发者那里获取反馈和更新,以进一步改进GDB的性能和功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咚.萌西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值