gdb: "Es wird keine Symboltabelle geladen"


90

Ich erhalte immer wieder diese Fehlermeldung, wenn ich versuche, einen Haltepunkt in gdb hinzuzufügen.

Ich habe diese Befehle zum Kompilieren verwendet:

gcc -g main.c utmpib2.c -o main.o
and:
cc -g main.c utmpib2.c -o main.o
and also:
g++ -g main.c utmpib2.c -o main.o

Ich habe auch "-ggdb" anstelle von "-g" versucht und erhalte immer noch diese Fehlermeldung.

Ich führe dann gdb aus:

$gdb

In gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.

Oh, ich meinte main.o. Ich habe es aktualisiert. Ich habe auch versucht, "-ggdb" zu verwenden, und es gibt mir immer noch das gleiche Problem.
user994165

Zeigen Sie uns genau, wie Sie gcc und gdb aufrufen. Kopieren und einfügen, um Fehler zu vermeiden.
Piotr Praszmo

1
Ich habe meine Befehle aktualisiert. Das ist wirklich komisch. Es hat gerade angefangen zu arbeiten. Ich weiß, dass ich zuvor mit "gdb a.out" auf gdb zugegriffen habe und eine Fehlermeldung erhalten habe, dass a.out nicht vorhanden ist oder so. Dann bin ich zur "exec-file" gewechselt. Jetzt habe ich es mit a.out versucht und es heißt "Diese GDB wurde als" i486-linux-gnu "konfiguriert" und Haltepunkte können gesetzt werden.
user994165

oh duh ich habe die falsche Datei a.out angegeben. Ich folgte einem GDB-Tutorial, ohne daran zu denken, den Dateinamen in meinen eigenen zu ändern.
user994165

Antworten:


58

Zunächst einmal haben Sie ein vollständig kompiliertes Programm, keine Objektdatei. Löschen Sie also die .oErweiterung. Achten Sie nun darauf, was in der Fehlermeldung steht. Dort erfahren Sie genau, wie Sie Ihr Problem beheben können: "Es wird keine Symboltabelle geladen. Verwenden Sie den Befehl" Datei " ."

(gdb) exec-file test
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

Oder übergeben Sie das Programm einfach über die Befehlszeile.

$ gdb test
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

Entschuldigung, ich bin ein GDB Noob. Diese Lösung (und keine der anderen Lösungen zu dieser Frage) funktioniert mit gdb unter WSL unter Windows. Haben Sie einen Vorschlag für mich?
Aderchox

138

Sie müssen den zusätzlichen Parameter -g hinzufügen, der Debug-Informationen auf Quellenebene generiert. Es wird so aussehen:

gcc -g prog.c

Danach können Sie gdb auf übliche Weise verwenden.


25
In meinem Fall löste diese Antwort das Problem für mich, während die akzeptierte Antwort keinen Unterschied machte.
Frankster

8

Ich habe das gleiche Problem und bin diesem Beitrag gefolgt . Er hat mein Problem gelöst.

Befolgen Sie die folgenden 2 Schritte:

  1. Stellen Sie sicher, dass die Optimierungsstufe ist -O0
  2. Fügen Sie -ggdbbeim Kompilieren Ihres Programms ein Flag hinzu

Viel Glück!


0

Wenn gccauf dem Kompilierungscomputer und gdb auf dem Testcomputer unterschiedliche Versionen vorhanden sind , kann es zu Inkompatibilitäten im Debuginfo-Format kommen .

Versuchen Sie, das Debuginfo-Format herunterzustufen, um dies zu beheben:

gcc -gdwarf-3 ...
gcc -gdwarf-2 ...
gcc -gstabs ...
gcc -gstabs+ ...
gcc -gcoff ...
gcc -gxcoff ...
gcc -gxcoff+ ...

Oder passen Sie gdbzu dem, den gccSie verwenden.


0

Ich bin heute Morgen auf dieses Problem gestoßen, weil ich dieselbe ausführbare Datei in VERSCHIEDENEN Betriebssystemen verwendet habe: nach dem Kompilieren meines Programms mit gcc -ggdb -Wall test.c -o test gestoßen, auf meinem Mac (10.15.2) kompiliert hatte, lief ich gdbmit der ausführbaren Datei in Ubuntu (16.04) in meiner VirtualBox.

Fix: Mit dem gleichen Befehl unter Ubuntu neu kompilieren, dann solltest du gut sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.