GNU gdb Fedora (6.8-37.el5) Kernal 2.6.18-164.el5
J'essaie de déboguer mon application. Cependant, chaque fois que je passe le binaire à la gdb, il dit:
(no debugging symbols found)
Voici la sortie du fichier du binaire, et comme vous pouvez le voir, il n'est pas supprimé:
vid: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
Je compile avec les CFLAGS suivants:
CFLAGS = -Wall -Wextra -ggdb -O0 -Wunreachable-code
Quelqu'un peut-il me dire si je manque quelques simples ici?
Certaines distributions Linux n'utilisent pas les symboles de débogage de style gdb
. (IIRC ils préfèrent dwarf2
.)
En général, gcc
et gdb
seront synchronisés quant au type de symboles de débogage qu'ils utilisent, et forcer un style particulier causera juste des problèmes; sauf si vous savez que vous avez besoin d'autre chose, utilisez simplement -g
.
La cause la plus fréquente de "aucun symbole de débogage trouvé" lorsque -g
est présent, c'est qu'il y a des "parasites" -s
ou -S
argument quelque part sur la ligne de liaison.
De man ld
:
-s
--strip-all
Omit all symbol information from the output file.
-S
--strip-debug
Omit debugger symbol information (but not all symbols) from the output file.
L'application doit être à la fois compilée et liée avec -g
option. C'est à dire. vous devez mettre -g
dans CPPFLAGS et LDFLAGS.
Vous devriez également essayer -ggdb au lieu de -g si vous compilez pour Android!
Remplacez -ggdb par -g et assurez-vous que vous ne supprimez pas le binaire avec la commande strip.
Je sais que cela a été répondu il y a longtemps, mais j'ai récemment passé des heures à essayer de résoudre un problème similaire. La configuration est un PC local exécutant Debian 8 en utilisant Eclipse CDT Neon.2, une carte ARM7 distante (Olimex) exécutant Debian 7. La chaîne d'outils est Linaro 4.9 utilisant gdbserver sur la carte distante et Linaro GDB sur le PC local. Mon problème était que la session de débogage démarrerait et que le programme s'exécuterait, mais les points d'arrêt ne fonctionnaient pas et quand une pause manuelle "aucune source ne pouvait être trouvée" en résulterait. Mes options de ligne de compilation (Linaro gcc) incluaient -ggdb -O0 comme beaucoup l'ont suggéré mais toujours le même problème. En fin de compte, j'ai essayé gdb bon sur la carte à distance et il ne se plaignait d'aucun symbole. La chose curieuse était que le "fichier" signalait un débogage non supprimé sur l'exécutable cible.
J'ai finalement résolu le problème en ajoutant -g aux options de l'éditeur de liens. Je ne prétendrai pas comprendre pourquoi cela a aidé, mais je voulais transmettre cela aux autres au cas où cela aiderait. Dans ce cas, Linux avait en effet besoin de -g sur les options de l'éditeur de liens.