4

如果在编译 C 文件时向 GCC 提供了默认选项 (-g),我如何从 Linux 上的可执行文件中转储 debug_loc 部分?我使用readelflinux 实用程序。

GCC 默认生成 DWARF4 格式的 DWARF 信息,所以如果我通过 -g-dwarf2 我可以看到 .debug_loc 部分,但是如果使用默认选项生成信息,如何检查该部分,因为我在转储中看不到该部分?

4

2 回答 2

0

您使用最新版本的 binutils 吗?在 Ubuntu 14.04 上,我可以使用“gcc -g test.c -o test”构建可执行文件。

通过“readelf --debug-dump=info test”,我可以确认它使用的是 DWARF 4。

之后,您(至少)有两种方法可以转储 .debug_line 部分的内容。

readelf --debug-dump=decodedline 测试

这将转储解码的行号信息。您可以直接获得 line==address 映射。

还有:

readelf --debug-dump=rawline 测试

这将为您提供原始的 debug_line 内容。

于 2015-02-11T08:33:35.077 回答
0

通常,为优化代码生成 .debug_loc。尝试使用编译器标志优化您的代码。

于 2019-10-31T17:08:12.190 回答