调试 gdb - 列出正在使用的源目录

the*_*yer 1 debugging gdb ada

尝试调试 ada 程序,gdb 似乎无法找到源。我确实确认正在运行的可执行文件与刚刚构建的可执行文件相同。连接后,它会在控制台中显示以下内容,而它应该将我带到源代码中的当前位置:

(gdb) attach 804 
0x0000003de620b68c in ?? ()
(gdb) frame 1
#1  0x0000000000000000 in ?? ()
(gdb) frame 0
#0  0x0000003de620b68c in ?? ()
Run Code Online (Sandbox Code Playgroud)

有没有办法让 gdb 告诉我它正在使用哪些源目录?或者还有其他方法可以解决这个问题吗?

我正在 x86_64-pc-linux-gnu GNAT Pro 6.4.2 (20110614-45) 上托管的 GPS 2017 (20170515) 中启动此程序。

cic*_*ron 5

看来你没有给 gdb 符号表或者你的程序被删除了。

当你附加到一个程序时,你应该告诉 gdb 你附加了什么可执行文件,以便它读取符号表。您应该使用 -g (调试支持)编译您的程序,并确保链接过程不会删除符号。然后,运行 gdb,如下所示:

gdb myprog -p 804
Run Code Online (Sandbox Code Playgroud)

但您也可以在不附加的情况下运行(这就是您所做的),然后附加。

gdb myprog
GNU gdb (GDB) 7.10 for GNAT GPL 2017 [rev=gdb-7.10-ref-199-g7cfc608]
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
See your support agreement for details of warranty and support.
If you do not have a current support agreement, then there is absolutely
no warranty for this version of GDB.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from prog...done.
(gdb) attach 804
Run Code Online (Sandbox Code Playgroud)

您还可以使用symbol-file命令告诉 gdb 要运行哪个程序文件:

(gdb) symbol-file myprog
Reading symbols from myprog...done.
Run Code Online (Sandbox Code Playgroud)

如果你的程序被剥离,gdb 将打印

Reading symbols from prog...(no debugging symbols found)...done.
Run Code Online (Sandbox Code Playgroud)

读取符号表后,您可以使用infosources命令列出 gdb 识别的源文件。这告诉您符号表中已标识的源文件。

(gdb) info sources
Source files for which symbols have been read in:

.../b__myprog.adb, 
.../b__myprog.ads, 
/build/eglibc-SvCtMH/eglibc-2.19/elf/rtld.c, 
/build/eglibc-SvCtMH/eglibc-2.19/elf/../sysdeps/generic/_itoa.h, 
/build/eglibc-SvCtMH/eglibc-2.19/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h, 
...
Run Code Online (Sandbox Code Playgroud)

您可能使用的另一个有趣的命令是info files。这告诉您已用关联符号文件标识的程序部分。如果您有动态库,您也应该在那里看到它们。

(gdb) info files
Symbols from "myprog".
Native process:
    Using the running image of child Thread 0x7ffff7fb4780 (LWP 32214).
    While running this, GDB does not access memory from...
Local exec file:
    `myprog', file type elf64-x86-64.
    Entry point: 0x40ac5e
    0x0000000000400238 - 0x0000000000400254 is .interp
    0x0000000000400254 - 0x0000000000400274 is .note.ABI-tag
    0x0000000000400278 - 0x0000000000400cb4 is .hash
    0x0000000000400cb8 - 0x0000000000403148 is .dynsym
    0x0000000000403148 - 0x00000000004046b5 is .dynstr
    0x00000000004046b6 - 0x00000000004049c2 is .gnu.version
...
Run Code Online (Sandbox Code Playgroud)