2015-02-11 128 views
1

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

GCC默认生成DWARF4格式的DWARF信息,所以如果我传递-g-dwarf2,我可以看到.debug_loc部分,但如果使用默认选项生成信息时如何检查该部分,因为我没有看到该部分倾倒?

+0

你使用最新版本的binutils吗?在Ubuntu 14.04上,我可以使用“gcc -g test.c -o test”构建可执行文件。然后执行“readelf --debug-dump = info test”并查看它的DWARF 4,然后执行readelf --debug-dump = decodedline测试并获取.debug_line部分的内容。 – dbrank0 2015-02-11 07:09:34

+0

ohh我不知道这个选项。请解释更多关于这个,并把它放在答案我会接受它非常感谢! – 2015-02-11 07:12:46

回答

0

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

随着“readelf --debug突降=信息测试”我可以证实它的使用矮4

之后,你有(至少)两种方式来转储.debug_line节的内容。

readelf --debug转储= decodedline测试

这将转储解码行号信息。你直接得到线==地址映射。

还有:

readelf --debug突降= rawline测试

这让你生debug_line内容。

+0

等一下。这是给我debug_line部分的内容,而不是debug_loc?连接/差异是什么? – 2015-02-11 10:05:07

+0

对不起。我的错。我以为你在寻找debug_line部分。使用--debug-dump = loc来获取.debug_loc。 – dbrank0 2015-02-11 10:33:11

+0

仅供参考:对于简单的可执行文件(一个函数),由于某种原因它不会生成debug_loc段。对于更复杂的,它确实如此。滑稽。 – dbrank0 2015-02-11 10:39:14