2017-11-14 3 views
1

Beim Versuch, ein Ada-Programm zu debuggen, scheint gdb keine Quelle zu finden. Ich habe bestätigt, dass die ausführbare Datei dieselbe ist, die gerade erstellt wurde. Nach befestigen, zeigt es die folgende in der Konsole, wenn stattdessen sollte es mir in den Quellcode der aktuellen Position nehmen:Debugging gdb - Auflistung der verwendeten Quellverzeichnisse

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

Gibt es eine Möglichkeit, die gdb, um mir zu sagen, welche Quellverzeichnisse es verwendet ? Oder gibt es eine andere Möglichkeit, dieses Problem zu beheben?

Ich lade dies aus GPS 2017 (20170515) gehostet auf x86_64-pc-Linux-gnu GNAT Pro 6.4.2 (20110614-45).

+0

Sie scheinen ein grundlegenderes Problem zu haben als "Quelle nicht lokalisieren" - GDB * hat keine Ahnung * wo Sie es verarbeiten. Dies hängt wahrscheinlich damit zusammen, wie Sie GDB aufgerufen haben. Versuchen Sie stattdessen 'gdb -p 804'. –

+0

Ich berufe es aus dem Menü in GPS ... – theMayer

Antwort

3

Es scheint, dass Sie gdb die Symboltabelle nicht gegeben haben oder Ihr Programm wird entfernt.

Wenn Sie an ein Programm anhängen, sollten Sie gdb mitteilen, welche Programmdatei Sie anhängen, damit es die Symboltabelle liest. Sie sollten Ihr Programm mit -g (Debugging-Unterstützung) kompiliert haben und sicherstellen, dass der Linkpass keine Symbole entfernt. Führen Sie dann gdb wie folgt:

gdb myprog -p 804 

Sie können aber auch ausführen, ohne Befestigung (das ist whay Sie getan haben) und dann anbringen.

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 

Sie können auch die Symbol-Datei Befehl gdb sagen, welche Programmdatei auszuführen:

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

Wenn Ihr Programm gestrippt wird, wird gdb

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

Wenn Sie Ihre Symboltabelle lesen, können Sie die Quelldateien auflisten, die von gdb erkannt werden, indem Sie inf verwenden o Quellen Befehl. Dies teilt Ihnen die Quelldateien mit, die in der Symboltabelle identifiziert wurden.

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

Ein weiterer interessanter Befehl, den Sie verwenden können, ist info Dateien. Dies teilt Ihnen die Programmabschnitte mit, die mit der zugehörigen Symboldatei identifiziert wurden. Wenn Sie dynamische Bibliotheken haben, sollten Sie sie auch dort sehen.

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

Eine Menge guter Informationen hier - danke. Ich werde dich wissen lassen, ob mich das irgendwohin bringt. – theMayer