简体   繁体   English

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

[英]Debugging gdb - listing source directories in use

Trying to debug an ada program, gdb doesn't seem to be able to locate a source. 试图调试ada程序,gdb似乎无法找到源代码。 I did confirm that the running executable was the same one that was just built. 我确实确认正在运行的可执行文件与刚刚构建的可执行文件相同。 Upon attach, it displays the following in the console, when instead it should take me to the current location in the source code: 在附加时,它会在控制台中显示以下内容,而它应该将我带到源代码中的当前位置:

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

Is there a way to get the gdb to tell me which source directories it is using? 有没有办法让gdb告诉我它正在使用哪些源目录? Or is there another way I can troubleshoot this issue? 或者有其他方法可以解决这个问题吗?

I am launching this out of GPS 2017 (20170515) hosted on x86_64-pc-linux-gnu GNAT Pro 6.4.2 (20110614-45). 我是在x86_64-pc-linux-gnu GNAT Pro 6.4.2(20110614-45)上托管的GPS 2017(20170515)中推出的。

It seems that you have not given gdb the symbol table or your program is stripped. 您似乎没有给gdb符号表或者您的程序被剥离。

When you attach to a program, you should tell gdb what executable you attach so that it reads the symbol table. 当你附加到程序时,你应该告诉gdb你附加了什么可执行文件,以便它读取符号表。 You should have compiled your program with -g (debugging support) and make sure the link pass does not strip symbols. 您应该使用-g(调试支持)编译程序,并确保链接传递不会删除符号。 Then, run gdb as follows: 然后,按如下方式运行gdb:

gdb myprog -p 804

But you can also run without attaching (which is whay you did) and then attach. 但你也可以在没有附加的情况下运行(这是你做过的),然后附上。

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

You can also use the symbol-file command to tell gdb what program file to run: 您还可以使用symbol-file命令告诉gdb要运行的程序文件:

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

If your program is stripped, gdb will print 如果你的程序被剥离,gdb将打印出来

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

Having your symbol table read, you can list the source files that are recognized by gdb by using info sources command. 读取符号表后,可以使用info sources命令列出gdb识别的源文件。 This tells you the source files that have been identified in the symbol 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, 
...

Another interesting command you may use is info files . 您可能使用的另一个有趣的命令是信息文件 This tells you the program sections that have been identified with the associated symbol file. 这将告诉您已使用关联的符号文件标识的程序部分。 If you have dynamic libraries, you should also see them there. 如果你有动态库,你也应该在那里看到它们。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM