从二进制文件中获取源文件(和位置)的列表
Get list of source files (and locations) from binary
我在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
...
使用侏儒转储,我发现感兴趣的变量是:DW_AT_comp_dir和DW_AT_decl_file。使用一个简单的bash脚本(一些grep和sed调用),我能够获得源列表。我想做的是从一个C/C++程序中获取这个源代码列表。为此,我安装了libdwar,但由于缺乏任何使用示例,我无法轻松实现我想要的。
我的问题是:1) 有人能提供一个从二进制文件中读取调试信息的C/C++示例吗?如果有其他库可以做到这一点,那么它不必与libdwarf一起使用。2) gdb能提供一个源列表吗?最终,我想构建自己的gdb接口,并滚动查看可用的源文件。
问候
gdb能提供一个源列表吗?
是:info sources
相关文章:
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- C++ 从具有开始位置和结束位置的列表中删除
- 是否有任何优雅的方式来遍历元素位置可以更改的列表?
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 创建一个函数以在给定位置将元素插入到列表中
- 如何在这两个分类的链接列表之间获得开关的位置
- 试图从链接列表中删除位置
- 从方法中获得链接列表中的位置
- 在链接列表前n位置中移动某个节点
- 通过指定第 n 个节点位置在单链接列表中插入数据
- 清除临时列表而不清除我将其分配到的位置
- 在GDB中查找列表术语的位置
- 在链接列表C 中的某个位置插入节点
- 如何从列表中删除奇数位置
- 从二进制文件中获取源文件(和位置)的列表
- 在代码中的同一位置最有效地填充静态标题列表和动态值列表
- 如何根据列表中的位置删除特定项目
- C/C++:函数参数列表中的"const"位置
- 动态规划:计算连续跳跃列表的所有可能的结束位置
- 保存和恢复内存位置列表的清洁机制