首页 > 解决方案 > 如何为 GCC 8.1.0 添加调试符号?

问题描述

我已将使用的 GCC 版本从4.2.1更新到8.1.0。(这是我唯一改变的东西)

问题是,在我这样做之后,调试符号就消失了。

我只使用“ -g ”选项运行 GDB。

使用 gcc v8.1.0,运行 gdb 时没有调试符号:

(gdb) br test
Breakpoint 1 at 0xa5fa053
(gdb) bt
0  0x09fa2303 in test_func()
1  0x097cecc7 in test_func_2 ()
2  0x097cf314 in test_func_3 ()

v4.2.1 是这样的:

(gdb) br test_func
Breakpoint 1 at 0xaa2fc7a: file /projects/gabriela/test/test.c, line 3
(gdb) r
Breakpoint 1, test_func(unit=0, flags=0, test1=0xffff95e0, test2=0xffff9b9c) at /projects/gabriela/test/test.c, line 3
(gdb) bt
0  test_func (unit=0, flags=0, test1=0xffff95e0, test2=0xffff9b9c) at /projects/gabriela/test/test.c, line 3
1  0x099ad349 in test_func_2 (unit=0, flags=0, test1=0x0, test2=0x0) at /projects/gabriela/test/test.c:10
2  0x099ada04 in test_func_3 (unit=0, flags=0, test1=0x0) at /projects/gabriela/test/test.c:20

如何使 gcc8.1.0 的 dbg符号gcc4.2.1

标签: gccgdbdwarfgcc8

解决方案


gcc 在 4.2.1 和 8.1.0 版本之间发生了很大变化。gcc 4.8 中发生的变化之一是它默认开始发出 DWARF4 调试信息。以前是 DWARF2。您的 gdb 可能无法理解 DWARF4 格式。您可以做的一件事是尝试使用-gdwarf-2gcc 选项发出 DWARF2。请参阅GCC 4.8 发行说明

DWARF4 现在是生成 DWARF 调试信息时的默认值。当在使用 DWARF 调试信息的平台上使用 -g 时,GCC 现在将默认为 -gdwarf-4 -fno-debug-types-section。GDB 7.5、Valgrind 3.8.0 和 elfutils 0.154 调试信息消费者默认支持 DWARF4。在 GCC 4.8 之前,使用的默认版本是 DWARF2。要使 GCC 4.8 生成较旧的 DWARF 版本,请使用 -g 和 -gdwarf-2 或 -gdwarf-3


推荐阅读