2010-08-15 6 views
3

J'utilise GDB pour déboguer des programmes C/C++ très souvent, et je suis raisonnablement bien informé de son fonctionnement et de ce qu'il peut faire.Difficulté pour GDB à charger des symboles de débogage

Cependant, de temps en temps je rencontre des problèmes où mystérieusement je n'arrive pas à obtenir GDB pour charger correctement les symboles d'un fichier de base.

Actuellement, j'ai un exécutable binaire dans un répertoire NFS partagé. L'exécutable a été définitivement compilé avec le drapeau -g3. L'exécutable s'est écrasé et a déversé un fichier core dans le répertoire/home de ma machine Linux.

Pour une raison quelconque, je ne peux pas obtenir GDB pour charger les symboles du fichier core.

Lorsque je tente:

$ gdb <executable_file> <core_file> 

charges GDB, mais je ne peux pas obtenir une trace, et pas de symboles de débogage sont chargés. Si j'exécute GDB, puis à l'invite GDB je tape core <core file name> il charge le fichier core, et je vois que le fichier core est définitivement associé à l'exécutable binaire qui s'est brisé plus tôt. Toutefois, GDB indique "Impossible de lire une image de fichier objet valide depuis la mémoire", donc je ne peux pas obtenir de trace arrière significative et aucun symbole de débogage n'est chargé.

Est-ce que quelqu'un sait ce qui pourrait être la cause de cela? Habituellement, je n'ai aucun problème à charger GDB correctement un fichier core et à lire les symboles de débogage, mais dans ce cas, cela ne fonctionne pas. Se pourrait-il que l'exécutable binaire soit stocké sur un support NFS partagé?

+0

Conjecture sauvage: un ou les deux fichiers se trouvent sur un support à distance, la machine gdb est-elle différente de l'environnement de génération ou de crash? – msw

Répondre

5

Vérifiez vos ulimits. C'est une source assez commune de confusion. Les fichiers de base tronqués peuvent rendre toute forme d'inspection de gdb inutile, bien vous pouvez lire le nom du binaire dans la plupart des cas, et si le fichier de base est au moins 8k, vous pouvez obtenir une trace de pile.

0

Toutes les bibliothèques partagées sont-elles chargées? essayez

$ ldd <executable_file>
et voir si cela vous aide à comprendre les choses.

Questions connexes