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

时间:2017-11-14 21:40:00

标签: debugging gdb ada

尝试调试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)。

1 个答案:

答案 0 :(得分:3)

您似乎没有给gdb提供符号表,或者您的程序已被删除。

当你附加到程序时,你应该告诉gdb你附加了什么可执行文件,以便它读取符号表。您应该使用-g(调试支持)编译程序,并确保链接传递不会删除符号。然后,按如下方式运行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

您还可以使用符号文件命令告诉gdb什么程序文件 运行:

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

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

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

读取符号表后,您可以使用 info sources 命令列出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, 
...

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

(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
...
相关问题