J'utilise gdb pour déboguer le code source du projet C. Je compile comme indiqué:
./configure --enable-debug CFLAGS="-g -o0"
make --debug=a
Je veux que le débogage s'arrête sur un fichier spécifique. Donc, quand je fixe le point d'arrêt en utilisant
(gdb) break main.c:672
Ça dit:
No source file named main.c.
Même lorsque je passe un nom de fonction spécifique (dans le fichier main.c) à casser. il dit: une telle fonction n'est pas définie.
Mon répertoire actuel contient ce fichier main.c. J'utilise Cygwin sur Windows. Quand je fixe un point d'arrêt en utilisant
(gdb) break main
Il a défini le point d'arrêt à une fonction principale du fichier Cygwin, pas dans mon code source.
comment puis-je résoudre mon premier problème?
juste curieux, comment éviter le deuxième problème, s'il y a le même nom de fonction dans les fichiers Cygwin et mon code source?
Si vous compilez avec -g
Et que vous ne parvenez toujours pas à définir un point d'arrêt, essayez d'ajouter raise(SIGTRAP)
dans votre main()
, exécutez le processus dans gdb, puis définissez le point d'arrêt vous voulez à nouveau après avoir frappé le SIGTRAP
.
Lorsque vous compilez votre .c
fichier, assurez-vous d'utiliser:
gcc filename.c -g
gdb <binary name>
Recherche de symboles de débogage de charge effectuée ou non?
Si non:
gdb) symbol-file <path-of-symbol-file>
vous pouvez trouver le fichier de symboles dans le répertoire obj
J'ai également rencontré un problème similaire plus tôt. Je viens de supprimer le dossier . Metadata et j'ai à nouveau importé le projet particulier et cela fonctionne bien.
Crucial est le paramètre gcc -g pendant la compilation.
Tout le reste est secondaire.
Chaque fois que vous devez utiliser GDB, tapez ce qui suit en ligne de commande
gcc -g -o outputfile sourcefile.c
Tapez maintenant
gdb -tui outputfile
puis entrez la commande de pause