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

Debugging gdb - listing source directories in use

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

(gdb) attach 804 
0x0000003de620b68c in ?? ()
(gdb) frame 1
#1  0x0000000000000000 in ?? ()
(gdb) frame 0
#0  0x0000003de620b68c in ?? ()

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

我从 x86_64-pc-linux-gnu 上托管的 GPS 2017 (20170515) 中发布 GNAT Pro 6.4.2 (20110614-45).

看来你没有给gdb符号table或者你的程序被剥离了。

当你附加到一个程序时,你应该告诉 gdb 你附加了什么 executable 以便它读取符号 table。您应该使用 -g(调试支持)编译您的程序,并确保 link pass 不会去除符号。然后,运行 gdb 如下:

gdb myprog -p 804

但您也可以 运行 不附加(这是您所做的)然后附加。

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

你也可以使用symbol-file命令告诉gdb什么程序文件 到 运行:

(gdb) symbol-file myprog
Reading symbols from myprog...done.

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

Reading symbols from prog...(no debugging symbols found)...done.

读取符号 table 后,您可以使用 info sources 命令列出 gdb 识别的源文件。这告诉您已在符号 table.

中标识的源文件
(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, 
...

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

(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
...