Pourquoi gdb pendre?
J'ai une application que je suis le débogage et j'essaie de comprendre comment gdb fonctionne et pourquoi je ne suis pas en mesure de vous par le biais de la demande parfois. Le problème que je rencontre est que gdb va s'accrocher et le processus, il est attaché à la volonté de saisir une défunte état quand je suis pas à pas dans le programme. Après gdb se bloque et je dois tuer pour libérer le terminal (ctrl-C ne fonctionne pas, je dois le faire à partir d'une autre fenêtre de terminal par l'obtention de l'id de processus pour que gdb session et l'aide de kill -9).
Je devine que gdb est suspendu parce qu'il est en attente pour l'application de s'arrêter à la prochaine instruction, et en quelque sorte l'application terminée l'exécution sans gdb identification de cette. Mais ce n'est que spéculation de ma part à partir du comportement que j'ai observée à ce jour. Donc ma question est si quelqu'un a déjà vu ce genre de comportement avant et/ou pourrait suggérer que la cause peut être. Je pense que cela pourrait m'aider à améliorer mon débogage d'une stratégie.
En cas de questions que j'utilise g++ 4.4.3, gdb 7.1, fonctionnant sur Ubuntu 10.04 x86_64.
merci pour la suggestion. Dès maintenant l'application a beaucoup de bibliothèque de code, mais je vais voir si je peux faire un petit test de cas que je pouvais poster comme un exemple.
Je vous recommande d'utiliser un plus récent
gdb
. La version actuelle est 7.3 et ils ont fait beaucoup de progrès. (et BTW, à l'aide de la plus récente g++
ie 4.6.2 serait également utile; car GCC a également progressé sur les informations de débogage).Je suis l'aide de ce qui est installé avec Ubuntu 10.04 LTS version, et je ne suis pas susceptible de mise à niveau jusqu'à la 12.04 est sorti et testé avec les systèmes que nous utilisons. Mais le test avec une nouvelle version de gdb est une bonne idée de vérifier le problème que je vois, juste au cas où il s'agit d'un bug avec gdb. Donc merci pour la suggestion, je vais essayer avec l'un des systèmes que je peux utiliser.
merci pour la suggestion. J'ai enfin réussi à essayer gdb 7.4 et il semble que fixe le problème que j'ai eu, donc je pense qu'il y a certains bug qui a déjà été résolu.
OriginalL'auteur Gabriel Southern | 2012-01-23
Vous devez vous connecter pour publier un commentaire.
Je dirais que le processus de débogage ne pas rester inactive si elle était la cause de l'interruption. Chaque fois GDB a terminé une étape, c'est de mettre à jour toutes les expressions nécessaires à l'impression. Il peut inclure des conseils suivants et ainsi, et dans certains cas, il peut échouer là (bien que je ne me rappelle pas d'un véritable "coup"). Également essayer de mettre à jour votre trace de la pile. Si la trace de la pile a été endommagé et n'est plus cohérent, il pourrait être pris au piège dans une boucle sans fin. Fixation de gdb pour
strace
de voir ce genre d'activités est en cours pendant le coup pourrait être un bon moyen d'aller plus loin en comprendre le problème.(par exemple, accès à des sources par l'intermédiaire d'un non-plus-travail NFS/SSHFS mont est l'un de la raison la plus fréquente pour gdb à accrocher, ici :P)
Je veux dire l'exécution de
strace -p `pidof gdb`
dans un terminal et en étudiant la sortie. Il doit présenter tous les appels système exécutée par le programme.merci pour la suggestion. Je n'ai pas compris ce qui est à l'origine du problème, mais encore, il est utile de regarder. Le dernier appel système où gdb se bloque est
wait4(26066,
(utiliser pour cela le PID varie bien sûr). En attendant une liste avec le ps -a montre que le processus de 26066 estdefunct
.était-ce, par hasard, le processus de débogage ?
merci pour les suggestions de dépannage, il semble que le problème que j'ai eu était liée à une sorte de bug dans gdb 7.1 parce qu'il fonctionne correctement avec gdb 7.4
OriginalL'auteur PypeBros
J'ai eu un problème similaire et résolu par l'envoi d'un
CONT
signal au processus en cours de débogage.kill -CONT <pid of the process>
OriginalL'auteur Michaël Witrant