在使用gdb调试源代码时如何判断是否定义了宏?

时间:2014-09-04 12:43:16

标签: c gdb

struct tree{
#ifdef A
   #define TREE_GET(x,y)        &x->y
#else
   #define TREE_GET(x,y)        x->y
#endif
}; 

我想知道是否定义了宏A.有没有我可以在gdb中使用的命令。

2 个答案:

答案 0 :(得分:4)

在编译时,我们传递-gdwarf-2和-g3标志,以确保编译器在调试信息中包含有关预处理器宏的信息。

例如,g++ -gdwarf-2 -g3 program.cpp -o program

C Preprocessor Macros

答案 1 :(得分:2)

使用-g3和gdb问题进行编译:

info macro A

来自gcc documentation on -g3

  

-glevel

     

...

     

3级包含额外信息,例如程序中存在的所有宏定义。使用-g3时,某些调试器支持宏扩展。

来自gdb documenation on info macro & friends

  

info macro [-a | -all] [ - ] macro

     

显示指定宏的当前定义或所有定义,并描述建立该定义的源位置或编译器命令行。可选的双破折号表示参数处理的结束和非C类宏的宏的开始,其中宏可以以连字符开头。