Ich versuche, ein einfaches C-Projekt mit GDB zu debuggen, aber GDB scheint nicht die Debugsymbole für das Programm zu finden, egal wie ich kompiliere es.GDB sagt "keine Symboltabelle", aber nm zeigt Datei hat Debugsymbole
Wenn ich das Programm in GDB laden, sie behauptet, erfolgreich die Symbole gelesen zu haben, weil es
Reading symbols from /home/edward/<executable>...done.
Allerdings druckt, wenn ich das Programm laufen, brechen auf einem Segmentierungsfehler, und geben info locals
, sagt sie
No symbol table info available.
auch bt
zeigt, dass die Ausführung innerhalb einer Funktion gestoppt I (kein System oder Bibliotheksaufruf) geschrieben, aber es gibt keine Zeilennummer, nur rohe Speicheradressen.
Warum kann GDB die Symbole nicht finden oder verwenden, die es zuvor erfolgreich gelesen hat? Ich habe nm
und objdump
auf der binären Datei ausgeführt, die ich ausgeführt habe, und beide zeigen Abschnitte wie .debug_info
, .debug_line
, so dass die Datei tatsächlich Debugging-Symbole enthält.
ich in der Regel mit einem Makefile kompilieren, die die folgenden Flags setzen:
CFLAGS = -mno-red-zone -fno-omit-frame-pointer -ggdb -O0 -I. -Wdeclaration-after-statement -Wall
, die ich verwendet werden sehen können, wenn make gcc aufruft. Ich habe jedoch versucht, nur -g
zu ändern und manuell durch Aufruf von gcc -g -O0
für eine einfache Testdatei zu kompilieren, und das Ergebnis ist immer noch das gleiche: Die Binärdatei enthält Debugsymbole, und GDB liest sie, ruft aber alle GDB-Befehle auf Eine Nachricht, dass Debug-Informationen nicht verfügbar sind.
Updates
Ich bin läuft Ubuntu 12.04 ist meine GDB Version 7.4, und meine GCC-Version ist 4.8.1.
Wenn ich set complaints 10000
in GDB und dann die Datei laden, druckt es die folgenden Beschwerden:
Reading symbols from /home/edward/<snip>/minithread...
DW_AT_low_pc 0x400690 is not < DW_AT_high_pc 0x33 for DIE at 0x205 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x4006c3 is not < DW_AT_high_pc 0xa9 for DIE at 0x235 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x40076c is not < DW_AT_high_pc 0xad for DIE at 0x287 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400819 is not < DW_AT_high_pc 0xe7 for DIE at 0x2d3 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400900 is not < DW_AT_high_pc 0x4f for DIE at 0x345 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x40094f is not < DW_AT_high_pc 0x55 for DIE at 0x39d [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x4009a4 is not < DW_AT_high_pc 0x38 for DIE at 0x3e7 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x4009dc is not < DW_AT_high_pc 0x43 for DIE at 0x433 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400a20 is not < DW_AT_high_pc 0x2e for DIE at 0x56c [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400a4e is not < DW_AT_high_pc 0x2e for DIE at 0x5aa [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400a7c is not < DW_AT_high_pc 0x29 for DIE at 0x5d4 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400aa5 is not < DW_AT_high_pc 0x49 for DIE at 0x620 [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400aee is not < DW_AT_high_pc 0xca for DIE at 0x66c [in module /home/edward/<snip>/minithread]
...DW_AT_low_pc 0x400bb8 is not < DW_AT_high_pc 0x7bb for DIE at 0x6f0 [in module /home/edward/<snip>/minithread]...done.
Sind diese Fehler die Ursache des Problems? Meinten sie, meine GDB sei die "falsche" Version?
'gcc -g' gibt Ihnen symbol info.Es gibt keinen Zweifel.Können Sie bitte Ihre Testdatei oder einen Teil der Testdatei, die wir kompilieren können, veröffentlichen? haben Sie versucht, indem Sie irgendwelche Symbole mit Hilfe von p-Option – Gangadhar
einen Platz zu starten, ist einfach "gdb", dann "Beschwerden 10000", und dann "file .../myexecutable" zu starten. Das wird den DWARF-Leser beschweren, wenn er seltsame Dinge in der DWARF findet. Sie erwähnen auch nicht, welche Version von GCC oder GDB Sie verwenden. Manchmal benötigt neuere gcc eine neuere gdb. –
mögliches Duplikat von [C++ App auf Ubuntu. Nach der Installation von gcc 4.8.1 funktioniert die gdb nicht] (http://stackoverflow.com/questions/19129706/c-app-on-ubuntu-after-installing-gcc-4-8-1-the-gdb-does -nicht-Arbeit) –