我正在使用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接口并滚动可用的源文件。
此致
答案 0 :(得分:3)
gdb可以提供源列表吗?
是:info sources