如何使用GDB从单独的文件加载文本(非二进制)调试信息?

时间:2015-07-13 22:21:30

标签: gdb elf debug-symbols

我有一个看起来像这样的ELF可执行文件:

$ hexcat hello
00000000:  7F 45 4C 46  01 01 01 00  00 00 00 00  00 00 00 00  .ELF............
00000010:  02 00 03 00  01 00 00 00  D7 80 04 08  34 00 00 00  ............4...
00000020:  00 00 00 00  00 00 00 00  34 00 20 00  01 00 00 00  ........4. .....
00000030:  00 00 00 00  01 00 00 00  00 00 00 00  00 80 04 08  ................
00000040:  00 80 04 08  E2 80 04 08  E2 80 04 08  05 00 00 00  ................
00000050:  00 10 00 00  B8 04 00 00  00 8B 5C 24  04 8B 4C 24  ..........\$..L$
00000060:  0C 8B 54 24  08 CD 80 C3  55 8B EC 6A  01 FF 75 0C  ..T$....U..j..u.
00000070:  FF 75 08 FF  75 FC BA 04  00 00 00 33  C0 E8 D2 FF  .u..u......3....
00000080:  FF FF 8D 65  FC 50 E8 01  00 00 00 0A  6A 01 6A 01  ...e.P......j.j.
00000090:  BA 04 00 00  00 33 C0 E8  B8 FF FF FF  8D 65 FC 50  .....3.......e.P
000000a0:  C9 C3 55 8B  EC E8 0D 00  00 00 48 65  6C 6C 6F 2C  ..U.......Hello,
000000b0:  20 57 6F 72  6C 64 21 6A  0D 33 D2 33  C0 E8 A6 FF   World!j.3.3....
000000c0:  FF FF 8D 65  00 6A 00 8B  45 FC C9 C3  8B 5C 24 04  ...e.j..E....\$.
000000d0:  B8 01 00 00  00 CD 80 E8  C6 FF FF FF  50 E8 EA FF  ............P...
000000e0:  FF FF                                               ..

我有一个符号表信息文件,如下所示:

$ cat hello.debug
rec 8048054 8048068 code write
rec 804808B 804808C string _tmp_2
rec 8048068 80480A2 code printl
rec 80480AA 80480B7 string _tmp_4
rec 80480A2 80480CC code main
rec 80480CC 80480D7 code exit
rec 80480D7 80480E2 code _start

我想在调试前者时使用后者;如何将这些信息提供给GDB?

(我试图调试的实际程序要大得多;这只是一个例子。)

1 个答案:

答案 0 :(得分:1)

  

如何将这些信息提供给GDB?

我不相信你可以。

您最好的选择可能是将该信息提供给一个工具,该工具将创建一个带有hello.debug描述的符号表的新ELF文件(通过生成具有适当{{1}的汇编文件,这应该相当容易。 1}}指令(documentation)和编译/链接结果),并使用.set 新ELF文件提供给GDB。