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

C++ 从二进制文件获取源文件(和位置)列表,c++,binary,gdb,objdump,C++,Binary,Gdb,Objdump,我在linux发行版工作。我正在编写一个C/C++程序,它需要一个二进制(可执行文件)编译时使用的源文件列表。当然,我使用带有-g标志的GCC编译了二进制文件。使用gdb我发现二进制文件的格式是: (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 lin

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

(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.
使用objdumpelfread我可以看到我需要的信息:

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就不必使用libdwarf。 2) gdb能提供源代码列表吗?最后,我想构建我自己的gdb接口,并滚动浏览可用的源文件

问候

gdb能提供源代码列表吗


是:
信息来源

谢谢!我一定在手册页上看过了。尽管如此,一个很好的调试符号读取库的例子还是会很受欢迎的。