Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
gdb能否打印扩展的预处理器/宏结果?_Gdb_C Preprocessor_Preprocessor_Debug Information - Fatal编程技术网

gdb能否打印扩展的预处理器/宏结果?

gdb能否打印扩展的预处理器/宏结果?,gdb,c-preprocessor,preprocessor,debug-information,Gdb,C Preprocessor,Preprocessor,Debug Information,例如: #include <stdlib.h> #define A 20 #define B 22 #define C (A+B) int main() { srand(time(0)); int i = (rand()&1) + C; return i; } 我怎么知道C是什么?gdb能告诉我吗?我加了兰德,所以我们不能轻易推断它是什么 预处理器将用20+22替换C。debuginfo中是否有此值可供打印 在一个实际的例子中,宏可能非常复杂,我

例如:

#include <stdlib.h>

#define A 20
#define B 22
#define C (A+B)

int main()
{
    srand(time(0));
    int i = (rand()&1) + C;
    return i;
}
我怎么知道C是什么?gdb能告诉我吗?我加了兰德,所以我们不能轻易推断它是什么

预处理器将用20+22替换C。debuginfo中是否有此值可供打印

在一个实际的例子中,宏可能非常复杂,我不想浪费时间做预处理器的工作

我怎么知道C是什么

首先,您需要使用-g3标志构建程序,以便调试信息中包含宏信息,启动程序并使用info macro显示宏定义:

也可以展开宏:

(gdb) macro expand C
expands to: (20+22)
我怎么知道C是什么

首先,您需要使用-g3标志构建程序,以便调试信息中包含宏信息,启动程序并使用info macro显示宏定义:

也可以展开宏:

(gdb) macro expand C
expands to: (20+22)

如果使用gcc和pass-g3选项编译3级调试信息,则程序中将显示所有宏定义。默认值为调试级别,其中-g为级别2。如果使用gcc编译,并传递级别3调试信息的-g3选项,则程序中将显示所有宏定义。默认值为调试级别,其中-g为级别2。
(gdb) macro expand C
expands to: (20+22)