Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用clang编译程序时,是否可以在gdb中扩展C宏?_C_Gdb_Clang_C Preprocessor - Fatal编程技术网

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

当使用clang编译程序时,是否可以在gdb中扩展C宏?,c,gdb,clang,c-preprocessor,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) #定义两个(POWER)(1宏由预处理器处理。编译器甚至不知道它们 但是,如果幸运的话,GCC的选项-g3将完成这项工作并生成代码,从而允许gdb展开宏 (我强调): -格雷维尔 [……] 级别3包括额外的信息,例如程序中存在的所有宏定义。某些调

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

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

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

#定义两个(POWER)(1宏由预处理器处理。编译器甚至不知道它们

但是,如果幸运的话,GCC的选项
-g3
将完成这项工作并生成代码,从而允许
gdb
展开宏

(我强调):

-格雷维尔

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


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


请参阅和。

但是这个问题是关于调试器的,而不是关于编译器。调试器可以访问二进制文件和源代码(通常),因此任何事情都是可能的。我将makefile更改为使用-g3编译,但当我尝试打印宏的结果时,我得到“GDB没有该代码的预处理器宏信息”,我需要在gdb中加载头文件吗?@TobiLehman:info macro JTH_BIT
告诉您什么?以及:您是否执行了
make clean
?@alk我执行了
make clean
,然后执行了
make
,以及编译时使用的
-g3
参数。然后,在调试器中宏位于作用域的行中,执行
info macroJTH_位
返回
GDB没有该代码的预处理器宏信息。
@TobiLehman:您使用的是哪种gcc,在哪种平台上?您可能应该使用一个简单的(2行程序)来测试这一点例如,如果您使用的gcc版本在使用了
-g3
后确实支持宏扩展,则应重新打开此文件,因为这是一个关于
clang
的问题,而假定的副本是关于
gcc
。我怀疑当op明显使用clang时,这是否有用。