gdb: "Aucune table de symboles n'est chargée"

90

Je continue à recevoir ce message d'erreur en essayant d'ajouter un point d'arrêt dans gdb.

J'ai utilisé ces commandes pour compiler:

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

J'ai aussi essayé "-ggdb" au lieu de "-g" et j'obtiens toujours ce message d'erreur.

J'exécute ensuite gdb:

$gdb

Dans gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.
user994165
la source
Oh je voulais dire main.o. Je l'ai mis à jour. J'ai aussi essayé d'utiliser "-ggdb" et cela me pose toujours le même problème.
user994165
Montrez-nous exactement comment vous invoquez gcc et gdb. Copiez-collez pour éviter toute erreur.
Piotr Praszmo
1
J'ai mis à jour mes commandes. C'est vraiment bizarre. Cela a juste commencé à fonctionner. Je sais auparavant que j'accédais à gdb en utilisant "gdb a.out" et que je recevais un message d'erreur indiquant que a.out n'existe pas ou quelque chose. Puis je suis passé au "fichier exécutable". Maintenant, j'ai essayé avec a.out et il dit "Ce GDB a été configuré comme" i486-linux-gnu "" et des points d'arrêt peuvent être définis.
user994165
oh duh je spécifiais le mauvais fichier a.out. J'ai suivi un tutoriel gdb sans penser à changer le nom de fichier en le mien.
user994165

Réponses:

58

Tout d'abord, ce que vous avez est un programme entièrement compilé, pas un fichier objet, alors supprimez l' .oextension. Maintenant, faites attention à ce que dit le message d'erreur, il vous indique exactement comment résoudre votre problème: "Aucune table de symboles n'est chargée. Utilisez la commande" fichier " ."

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

Ou passez simplement le programme sur la ligne de commande.

$ 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) 
Kevin
la source
Désolé, je suis un noob gdb. Cette solution (et aucune des autres solutions sur cette question) fonctionne avec gdb sur WSL sous Windows, avez-vous une suggestion à me faire?
aderchox
139

Vous devez ajouter le paramètre supplémentaire -g, qui génère des informations de débogage au niveau de la source. Cela ressemblera à:

gcc -g prog.c

Après cela, vous pouvez utiliser gdb de manière courante.

Kralex
la source
25
Dans mon cas, cette réponse a résolu le problème pour moi, alors que la réponse acceptée ne faisait aucune différence.
frankster
8

J'ai le même problème et j'ai suivi ce post , cela a résolu mon problème.

Suivez les 2 étapes suivantes:

  1. Assurez-vous que le niveau d'optimisation est -O0
  2. Ajouter un -ggdbindicateur lors de la compilation de votre programme

Bonne chance!

Charles Chow
la source
0

Chaque fois que gccla machine de compilation et gdb la machine de test ont des versions différentes , vous pouvez être confronté à une incompatibilité de format debuginfo .

Pour résoudre ce problème, essayez de rétrograder le format debuginfo:

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

Ou correspondre gdbà celui gccque vous utilisez.

ulidtko
la source
0

J'ai rencontré ce problème ce matin car j'ai utilisé le même exécutable dans DIFFÉRENTS OS: après avoir compilé mon programme avec gcc -ggdb -Wall test.c -o testdans mon Mac (10.15.2), j'ai courugdb avec l'exécutable d'Ubuntu (16.04) dans ma VirtualBox.

Correction: recompilez avec la même commande sous Ubuntu, alors vous devriez être bon.

Wenhe Qi
la source