库读取ELF文件DWARF调试信息

时间:2009-07-09 00:37:15

标签: python debugging elf dwarf

对于以DWARF格式读取ELF文件调试信息的良好跨平台库的任何建议?我想在Python程序中阅读DWARF调试信息。

4 个答案:

答案 0 :(得分:21)

块上有一个新的孩子 - pyelftools - 一个用于解析ELF和DWARF格式的纯Python库。试一试。

它的目标是功能完整,目前正在积极开发中,因此任何问题都应该快速而热情地处理: - )

答案 1 :(得分:10)

“ELF调试信息”的概念并不存在:ELF规范故意未指定.debug部分的内容。

常见的调试格式是STAB和DWARF。用于读取DWARF的库是libdwarf

答案 2 :(得分:7)

您可能对pydevtools中的DWARF库感兴趣:

>>> from devtools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
>>> print dwarf
.debug_info
COMPILE_UNIT<header overall offset = 0>
<0><11> compile_unit
producer: GNU C 4.4.3
language: C89
name: a/test.c
comp_dir: /home/emilmont/Workspace/dbg/test
low_pc: 0x080483e4
high_pc: 0x08048410
stmt_list: 0
[...]

答案 3 :(得分:4)

遗憾的是,您阅读DWARF调试信息的选项非常有限。

据我所知,只有一个用于解析DWARF调试信息的通用库,即libdwarf。不幸的是,没有人为libdwarf编写Python绑定(也许你可以自己动手并与其他人分享:)。你当然可以尝试使用ctypesPython C API来访问库的功能。

然而,一个不太优雅的解决方案是使用现有的DWARF解析器并解析它输出的文本信息。您的选择(在Linux上)是

objdump -W
readelf --debug-dump=[OPTIONS]

我目前使用的是一个基于readelf构建的项目,它对DWARF调试信息的支持非常全面。您可以简单地使用Python在shell中执行任一命令,然后根据需要解析信息。当然不像图书馆那样理想,但应该做到这一点。

编辑:我在之前的评论中注意到你提到了Windows。这两个程序(objdump和readelf)都是GNU-binutils的一部分,因此它们应该可以与Cygwin或mingw一起使用。