Here is the source file fragment:

#define TEST 34
#define PRINT_CONCAT(a, b) \
    printf("%d\n", a##b)

Compiling with GCC and linking this source file into a binary with flags -ggdb3 -O3 and running the app with gdb shows up the following behavior:

(gdb) p TEST                                                                                                                                                                                                       
$3 = 34                                                                                                                                                                                                            
(gdb) p PRINT_CONCAT                                                                                                                                                                                               
No symbol "PRINT_CONCAT" in current context. 

Is there a way to make gdb expand function macros in any way?

推荐答案

It turned to be as easy as macro expand

(gdb) macro expand PRINT_CONCAT(2, 4)                                                                                                                                                                              
expands to: printf("%d\n", 24) 

-ggdb3 is not even required, -g3 is enough. -g2 does not seem to include the desired information.

C++相关问答推荐

C-传递整个 struct 变量

使用 fread() 和 fwrite 时如何检测读/写错误?

MISRA2012 规则 12.1 建议使用额外的括号

C 中的格式说明符及其作用?

C中的 struct 字符串变量赋值

如何以编程方式确定 gstreamer 元素是否为 Bin?

这个复杂的 C 类型声明是什么意思?

如果锁可以防止使用volatile

C 程序启动参数

你能用科学计数法打印一个整数吗?

&> 重定向是如何在 UNIX shell 中实现的?

如何在C中找到字符串中字符的索引?

如何让 GDB 告诉我是哪个地址导致了段错误?

C char* 到 int 的转换

在 C 中写入标准输出是什么意思?

“保留用于任何用途”是什么意思?

Visual Studio 调试器错误:无法启动程序 找不到指定文件

C - 如何实现 Set 数据 struct ?

内存分配是系统调用吗?

是否有充分的理由在 C 中始终将定义括在括号中?