You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDB是否不支持DWARF 5宏段?实测宏符号无法查看

GDB是否不支持DWARF 5宏段?

GDB 12.1不完整支持DWARF 5的宏段,这正是你遇到问题的核心原因。

DWARF 5标准对宏调试信息的存储格式做了重大变更——不再沿用DWARF 4中的.debug_macro段,转而采用新的宏表示结构(关联.debug_macro.dwo段与.debug_info中的相关条目)。而GDB 12.1对这种新格式的宏解析支持存在缺陷,无法正确识别DWARF 5编译产物中的宏定义。

复现测试过程

测试代码

#include <stdio.h>
#define A "hello world
"
void main()
{
    printf(A);
}

编译与调试验证

使用GCC 12.2.1分别以DWARF 4和DWARF 5格式编译,再用GDB 12.1调试:

  1. DWARF 4编译调试
$ gcc -gdwarf-4 -g3 a.c \
&& gdb -ex 'set confirm off' \
       -ex 'break main' \
       -ex 'run' \
       -ex 'p A' \
       -ex q \
       a.out
...
Breakpoint 1, main () at a.c:5
5       printf(A);
$1 = "hello world
"

此时GDB可以正常解析并输出宏A的值。

  1. DWARF 5编译调试
$ gcc -gdwarf-5 -g3 a.c \
&& gdb -ex 'set confirm off' \
       -ex 'break main' \
       -ex 'run' \
       -ex 'p A' \
       -ex q \
       a.out
...
Breakpoint 1, main () at a.c:5
5       printf(A);
No symbol "A" in current context.

GDB无法识别宏A,提示符号不存在。

解决办法

若需要在DWARF 5环境下调试宏,需将GDB升级至13.0及以上版本——这些版本完整实现了DWARF 5宏格式的解析支持,能够正常读取DWARF 5编译产物中的宏定义。


内容的提问来源于stack exchange,提问作者x-yuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:32:10