从二进制文件获取源文件(和位置)列表

我正在一个Linux发行版中工作。 我正在编写一个C / C ++程序,它需要编译一个二进制文件(可执行文件)的源文件列表。 当然,我使用带有-g标志的GCC编译二进制文件。 使用gdb我发现二进制文件的格式是DWARF2:

(gdb) info source
Current source file is src/main.cpp
Compilation directory is /path/to/source
Located in /path/to/source/src/main.cpp 
Contains 43 lines.
Source language is c++.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.

使用objdump或者elfread我可以看到我需要的信息:

bash> objdump -W binary
...
The File Name Table:
  Entry Dir Time    Size    Name
  1 1   0   0   main.cpp
  2 2   0   0   curses.h
  3 3   0   0   tprint.h
  4 3   0   0   twindow.h
  5 4   0   0   locale.h
...

使用dwarfdump我发现感兴趣的变量是: DW_AT_comp_dirDW_AT_decl_file 。 使用简单的bash脚本(几个grep和sed调用),我能够获得源列表。 我想要做的是从C / C ++程序中获取这个源列表。 为此,我安装了libdwarf ,但由于缺乏任何使用示例,我无法轻松实现我想要的内容。

我的问题是:1)有人可以提供一个从二进制读取调试信息的C / C ++示例吗? 如果有其他库可以执行此操作,则不必使用libdwarf。 2)gdb是否可以提供源列表? 最后,我想建立自己的接口到gdb并滚动可用的源文件。

问候


gdb可以提供源列表吗?

是的: info sources

链接地址: http://www.djcxy.com/p/70395.html

上一篇: Get list of source files (and locations) from binary

下一篇: osx snow leopard