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调试:
- 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的值。
- 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
相关产品推荐
相关产品推荐

