我在一个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_dir和DW_AT_decl_file。使用一个简单的bash脚本(几个grep和sed调用),我能够得到源列表。我想做的是从C/C++程序中获取这个源列表。为了实现这个目的,我安装了libdwarf,但由于缺乏任何使用示例,我无法轻松实现我想要的功能。
我的问题是: 1)是否有人能够提供一个从二进制文件中读取调试信息的C/C++示例?如果有其他库可以做到这一点,它不必使用libdwarf。 2)gdb能提供源代码列表吗?最终,我想构建自己的gdb接口,并滚动查看可用的源文件。
问候