Gdb 如何debug宏定义

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

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

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

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

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

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

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

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

-gdwarf-2不能再接受一个紧密链接的debug等级,这是由于gcc过去支持一个选项-gdwarf,这个选项要以DWARF的1号版本格式来产生debug信息(这个版本和2号版本是大相径庭的),若是那么作就会让人很困惑。这种debug格式太长了,可是这个选项又不能变,因此改用选项-glevel来为DWARF改变debug等级。test

加上相关参数后,编译:变量

gcc -gdwarf-2 -g3 test.c

gdb a.out后就可以使用 "p 宏名" 输出宏的内容了gcc

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

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

macro expand macro_name
相关文章
相关标签/搜索