使用clang编译程序时,可以在gdb中扩展C宏吗?

时间:2014-02-09 21:36:34

标签: c gdb clang c-preprocessor

我有一个宏,它获取整数的第J位:

#define TWO_TO_THE(POWER) (1 << POWER)

#define JTH_BIT(BITS, J)  ((TWO_TO_THE((J-1)) & BITS) != 0)

但是,我不能通过发出命令print JTH_BIT(i,j)从gdb中使用它,在调试时是否可以使用C中的宏?

2 个答案:

答案 0 :(得分:6)

宏由预处理器处理。编译器甚至不知道它们。

但是,如果幸运的话,gcc的选项-g3可以完成这项工作并生成允许gdb扩展宏的代码。

来自gdb documentation(我强调):

  

-glevel

     

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

答案 1 :(得分:2)

如果使用正确的选项编译程序,它应该可以工作。在gcc中,编译时需要说“-g3”

请参阅herehere