Gdb 如何debug宏定义

gcc默认编译的时候,gdb调试过程中是不能看到宏定义的,"p 宏名" 会显示错误,如下:

(gdb) p CLIENT6_BEGIN_FLG
No symbol "CLIENT6_BEGIN_FLG" in current context.

这样gdb调试过程中就很不直观,尤其是很多大型程序的宏定义比较复杂。

要使gdb能查看宏定义,gcc编译的时候要加上-g3和-gdwarf-2两个选项。

gdb的debug一共有4个等级,默认使用第2个等级。

----第0个等级表示不使用任何的debug信息,但-g0和-g是不一样的

----第1个等级包含最少的信息,但对于查看堆栈来说已经足够了,它包含了一些函数描述和外部变量,但不包含局部变量和行号

----第3个等级包含额外的信息,例如宏定义,要使用选项-g3

-gdwarf-2不能再接受一个紧密连接的debug等级,这是因为gcc过去支持一个选项-gdwarf,这个选项要以DWARF的1号版本格式来产生debug信息(这个版本和2号版本是截然不同的),如果那么做就会让人很困惑。这种debug格式太长了,但是这个选项又不能变,所以改用选项-glevel来为DWARF改变debug等级。

加上相关参数后,编译:

gcc -gdwarf-2 -g3 test.c

gdb a.out后就能够使用 "p 宏名" 输出宏的内容了

(gdb) p CLIENT6_BEGIN_FLG
$1 = "<Client6>"

需要查看宏定义是如何被展开的,可以使用如下的命令:

macro expand macro_name

 

转载于:https://my.oschina.net/shou1156226/blog/776764

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值