在Mac OSX中读取DWARF文件

时间:2009-05-03 03:39:57

标签: dwarf

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

2 个答案:

答案 0 :(得分: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),或者您可以查看源代码以解释如何编写自己的库/函数集做这个工作。

答案 1 :(得分:1)

你可以看看binutils中的avr-readelf。 binutils / dwarf.c中的display_debug_lines()函数负责解码DWARF linenumber信息。

另外,如上所述,您可以使用libdwarf。这样可以很好地隐藏DWARF的低级复杂性,并让您专注于获取数据。

使用elfdescriptor设置libdwarf并获取Dwarf_Debug结构后,您可以执行以下操作:

  1. 使用dwarf_srclines()
  2. 遍历所有编译单元
  3. 在每个cu
  4. 上使用dwarf_srclines()
  5. 对dwarf_srclines()返回的数组中的每个条目使用dwarf_lineaddr()
  6. 记得在正确的位置使用dwarf_dealloc()。