以下是源文件片段:

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

使用GCC编译并将此源文件链接为带有标志-ggdb3 -O3的二进制文件,然后使用gdb运行应用程序将显示以下行为:

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

有没有办法让GDB以某种方式扩展函数宏?

推荐答案

结果,它变得非常容易

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

-ggdb3分甚至不是必须的,-g3分就够了.-g2似乎没有包含所需的信息.

C++相关问答推荐

使用sd-设备列举设备导致seg错误

如何将匿名VLA分配给指针?

如何避免使用相对路径包含在c中

Zig将std.os.argv转换为C类型argv

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

为什么C语言允许你使用var =(struct NAME){

如何在C客户端应用程序的ClientHello消息中添加自定义扩展?

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

CC2538裸机项目编译但不起作用

FRIDA-服务器成为端口扫描的目标?

处理来自浏览器的HTTP请求

运行时错误:在索引数组时加载类型为';char';`的空指针

Valgrind用net_pton()抱怨

unions 的原子成员是个好主意吗?

用C++初始化局部数组变量

Makefile无法将代码刷新到ATmega328p

使用mmap为N整数分配内存

将size_t分配给off_t会产生符号转换错误

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

WSASocket在哪里定义?