2017-09-11 4 views
0

Mon application a planté en raison d'une exception non interceptée (mon code C++ renvoie une exception non interceptée dans certaines conditions). J'essaye de gdb le corefile. La bibliothèque binaire n'est pas "rayée". Et la trace de la pile montre la fonction (mon code) à partir de laquelle une exception non interceptée est lancée, mais quand j'essaie d'imprimer les arguments de la fonction, je reçois toujours "aucun symbole xxx dans le contexte actuel". Les arguments d'information retournent également "Aucune information de table de symbole disponible".corefile gdb ne pas voir les paramètres de la fonction

Quelqu'un peut-il jeter une lumière pourquoi? est-ce dû à l'exception non capturée qui déroute/corrompt la pile?

Merci, Frank

+0

Une corbeille ne contient pas nécessairement tous les symboles. Cela peut être dû à des bibliothèques manquantes ou à des bibliothèques non déboguées ou même à l'optimisation du compilateur. – Griffin

+0

Aussi, vous devriez essayer de sapins [recherche de débordement de la pile] (https://stackoverflow.com/search?q=gdb+No+symbol+table+info+available) avant de poser une nouvelle question. – Griffin

Répondre

1

Votre binaire manque d'informations de débogage.

Si vous avez construit avec gcc, et que vous voulez déboguer le core vous avez déjà (si, par exemple, il est difficile de reproduire l'accident), vous peut être en mesure de se remettre de cela en reconstruction du binaire avec exactement la même source et lignes de commande, en ajoutant -g pour compiler et lier les commandes. (Remarque: vous devez utiliser la même compilation des lignes, le remplacement -O2 avec -g ne ferait pas.)

Si l'accident est pas difficile à reproduire, simplement reconstruire le binaire avec -g -O0, exécutez sous GDB, et profitez débogage "facile".

La bibliothèque binaire est "non rayée".

Cela ne signifie pas ce que vous pensez que cela signifie. Non dénudé signifie que la table de symboles est toujours présente dans le binaire. GDB lira cette table de symboles et l'utilisera pour mapper les plages d'adresses aux noms de fonctions.

Mais pour récupérer les noms et les valeurs des variables locales et les paramètres, vous devez compiler avec les informations de débogage (qui est ce que -g drapeau fait pour la plupart des compilateurs).

+0

Le fanion d'optimisation doit-il également être abaissé? – dlmeetei

+0

@dlmeetei Pas si vous voulez analyser le fichier 'core' déjà existant. –

+0

Mais nous demandons de recompiler – dlmeetei