任何人都可以帮我编写一个可以读取 DWARF 文件并给我文件名、行号和函数名详细信息的程序。
user100074
问问题
2150 次
2 回答
4
DWARF-2 和 DWARF-3 的规格在这里:
http://dwarfstd.org/dwarf-2.0.0.pdf
http://dwarfstd.org/Dwarf3.pdf
这里有一个不错的阅读 DWARF 文件的库:
http://reality.sgiweb.org/davea/dwarf.html
您可以获取并使用该库来读取您的 DWARF 文件(它读取 DWARF-2 和 DWARF-3),或者您可以查看源代码以了解如何编写自己的库/函数集来执行工作。
于 2009-05-03T03:54:44.307 回答
1
你可以看看 binutils 中的 avr-readelf。binutils/dwarf.c 中的 display_debug_lines() 函数负责解码 DWARF 行号信息。
此外,如上所述,您可以使用 libdwarf。这很好地隐藏了 DWARF 的低级复杂性,让您专注于获取数据。
使用 elfdescriptor 设置 libdwarf 并获得 Dwarf_Debug 结构后,您可以执行以下操作:
- 使用 dwarf_srclines() 遍历所有编译单元
- 在每个 cu 上使用 dwarf_srclines()
- 对从 dwarf_srclines() 返回的数组中的每个条目使用 dwarf_lineaddr()
- 记得在正确的地方使用 dwarf_dealloc()。
于 2009-05-15T22:16:21.893 回答