【问题标题】:Get list of source files (and locations) from binary从二进制文件中获取源文件(和位置)列表
【发布时间】:2013-12-04 16:06:10
【问题描述】:

我正在使用 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.

使用 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 脚本(几个 grepsed 调用)我能够获得源列表。我想做的是从 C/C++ 程序中获取这个源列表。为此,我安装了 libdwarf,但由于缺乏任何使用示例,我无法轻松实现我想要的。

我的问题是: 1) 有人可以提供一个从二进制文件中读取调试信息的 C/C++ 示例吗?如果有其他库可以做到这一点,它不必与 libdwarf 一起使用。 2) gdb 可以提供源列表吗?最终我想建立自己的 gdb 界面并滚动查看可用的源文件。

问候

【问题讨论】:

    标签: c++ binary gdb objdump


    【解决方案1】:

    gdb 可以提供源列表吗?

    是的:info sources

    【讨论】:

    • 谢谢!我必须在手册页中查看过。尽管如此,还是非常感谢调试符号读取库的一个很好的例子。
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2021-09-07
    相关资源
    最近更新 更多