7

任何人都可以帮我编写一个可以读取 DWARF 文件并给我文件名、行号和函数名详细信息的程序。

4

2 回答 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 结构后,您可以执行以下操作:

  1. 使用 dwarf_srclines() 遍历所有编译单元
  2. 在每个 cu 上使用 dwarf_srclines()
  3. 对从 dwarf_srclines() 返回的数组中的每个条目使用 dwarf_lineaddr()
  4. 记得在正确的地方使用 dwarf_dealloc()。
于 2009-05-15T22:16:21.893 回答