Get list of source files (and locations) from binary
binary, c++, gdb, objdump
Solution
Can gdb provide a source list?
Yes: `info sources`
Problem
I'm working in a linux distro. I'm writing a C/C++ program that requires a list of source files that a binary (executable) was compiled with. I compiled the binary using GCC with the -g flag, of course. Using gdb I found out the format of the binary is 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. ``` Using objdump or elfread I see the information that I need: ``` 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 ... ``` Using dwarfdump I see that the variables of interest are: DW_AT_comp_dir and DW_AT_decl_file. Using a simple bash script (a few grep and sed calls) I was able to get the source list. What I would like to do, is get this source list from within a C/C++ program. For this purpose I have installed libdwarf, but with lack of any usage examples I'm unable to easily implement what I want. My questions are: 1) Could someone provide a C/C++ example that reads debug information from a binary? It does not have to be with libdwarf if there are other libraries that can do this. 2) Can gdb provide a source list? Eventually I would like to build my own interface to gdb and scroll though available source files. Regards