web-dev-qa-db-fra.com

Comment activer la jolie impression gdb pour les objets C ++ STL dans Eclipse CDT?

J'essaie d'ajouter une jolie impression pour les objets STL dans Eclipse cdt. J'ai essayé de suivre les étapes décrites ici:

http://sourceware.org/gdb/wiki/STLSupport

J'ai vérifié le dossier python, mais je n'arrive pas à y arriver ...

J'ai créé un gdbinit et sélectionné pour ma configuration de débogage, mais chaque fois que j'essaie de démarrer le débogage, j'obtiens l'erreur suivante:

Error while executing Python code.
!STACK 0
Java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:6: Error in sourced command file:
Error while executing Python code.
        at org.Eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.processMIOutput(AbstractMIControl.Java:824)
        at org.Eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.run(AbstractMIControl.Java:662)

Si j'essaie d'exécuter le contenu de gdbinit dans un shell python Shell, j'obtiens cette erreur:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import sys
sys.path.insert(0, '/home/Documents/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named libstdcxx.v6.printers

Il semble que je n'ai pas un tel module ... Je n'ai aucune idée de Python donc je ne sais même pas ce qu'est un "module" en Python ....

Quelqu'un peut-il m'aider avec ça? Il est très important pour moi de pouvoir voir de vraies informations de débogage, ou utiles pour le dire ainsi. Ou bien, je peux déboguer même à partir de la console et obtenir une sortie agréable de gdb, cuz si je vais imprimer une chaîne par exemple, j'obtiens une sortie inutile ....

Cordialement, Alex

39
AlejandroVK

C'est la solution qui fonctionne pour moi.

Téléchargez ( http://www.gnu.org/software/gdb/download/ ) et installez la dernière gdb (c'est-à-dire avec --prefix $ HOME). Il prend en charge python scripting.

Obtenez python jolies imprimantes en exécutant

svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

dans un répertoire de votre choix (par exemple $ (HOME)/distribs/gdb_printers). Vous obtiendrez le sous-répertoire "python" dans le répertoire de paiement.

Mettez ceci dans votre fichier $ (HOME) /. Gdbinit avec le chemin d'accès correct aux jolies imprimantes:

python
import sys 
sys.path.insert(0, '/home/YOUR_NAME_HERE/distribs/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

Cela rend la jolie impression utilisable via l'interface de ligne de commande de gdb (>(gdb) p my_std_string).

Explique ensuite l'utilisation lors du débogage dans Eclipse.

Téléchargez ( http://download.Eclipse.org/Eclipse/downloads/ ) la dernière version stable de Stream ou la version d'Eclipse (> = version 3.7).

Télécharger ( http://download.Eclipse.org/tools/cdt/builds/8.0.0/index.html pour Eclipse Indigo ou http://www.Eclipse.org/ cdt/downloads.php pour Eclipse Juno) dernier outil de développement Eclipse C/C++ (Eclipse CDT).

Exécutez Eclipse et choisissez le répertoire de l'espace de travail où vos options seront stockées (c'est-à-dire $ HOME/projets). Cliquez sur Aide-> Installer un nouveau logiciel ... Cliquez sur Ajouter ...-> Archiver ... et choisissez la version CDT que vous venez de télécharger. Ensuite, vous devez choisir les composants à installer: cliquez sur Fonctions principales du CDT -> Outils de développement C/C++ (et éventuellement d'autres composants de votre choix). Ensuite, procédez à l'installation et redémarrez Eclipse.

Spécifiez l'emplacement approprié de gdb et .gdbinit dans Eclipse et assurez-vous que l'option Jolie impression est activée:

Window -> preferences -> C/C++ -> Debug -> GDB

Vous pouvez maintenant voir les conteneurs STL assez imprimés dans la vue Variables lors du débogage dans Eclipse.

D'autres commandes peuvent être utilisées pour rendre la sortie gdb plus décente:

set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off

MISE À JOUR: Pour ce qui est de le faire fonctionner pour les anciens projets, voir le point 4) dans la réponse rustyx ci-dessous.

UPDATE2: ubuntu 12.04 a libstdc ++ 6-4.6-dbg qui installe /usr/share/gcc-4.6/python/libstdcxx/ python module pour vous

58
Riga

Je sais que cela ne répond pas à la question d'origine, mais j'ai pensé que cela pourrait être utile pour ceux qui déboguent dans Eclipse sur Windows/MinGW . La procédure pour Windows est similaire:

1) Obtenez Python 2.7.x à partir de http://python.org/download/

2) Créez .gdbinit quelque part contenant quelque chose comme ceci:

python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

3) Configurez Eclipse CDT pour utiliser C:\MinGW\bin\gdb-python27.exe comme débogueur et votre .gdbinit comme fichier de configuration.

4) Recréez votre session de lancement de débogage (supprimez l'ancienne et créez une nouvelle à partir de zéro).

10
rustyx

Je voudrais développer la réponse de Windows 7 car certaines étapes clés sont omises:

Ceci est pour les utilisateurs de MinGW avec Eclipse CDT

0) Si vous n'avez pas python GDB, ouvrez un shell/commande et utilisez MinGW-get.exe pour `` installer '' GDB compatible Python, par ex.

   MinGw-get.exe install gdb-python

1a) Obtenez Python 2.7.x de http://python.org/download/ et installez

1b) Assurez-vous que PYTHONPATH et PYTHONHOME sont définis dans votre environnement:

 PYTHONPATH should be C:\Python27\Lib   (or similar)
 PYTHONHOME should be C:\Python27

1c) Ajoutez PYTHONHOME à votre CHEMIN

 %PYTHONHOME%;...

2a) Ouvrez un texte, entrez les instructions suivantes. Remarquez que la 3e ligne pointe vers où se trouvent les scripts python. Voir les notes ci-dessous à ce sujet!

python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')         
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

2b) Enregistrer sous '.gdbinit' REMARQUE: Windows Explorer ne vous permettra pas de nommer un fichier commençant par un point de l'Explorateur. La plupart des modifications de texte (y compris le Bloc-notes) vous le permettent. Les fichiers d'initialisation GDB sont comme des "scripts" de commandes GDB que GBD exécutera lors du chargement.

2c) Le fichier '.gdbinit' doit être dans le répertoire de travail de GDB (très probablement c'est le répertoire racine de vos projets mais votre IDE peut vous le dire).

3) Ouvrez votre boîte de dialogue Préférences Eclipse (ou autre IDE). Accédez au sous-menu C++ Debugger.

4) Configurez Eclipse pour utiliser C:\MinGW\bin\gdb-python27.exe comme débogueur et votre .gdbinit comme fichier de configuration.

5a) Recréez toutes vos configurations de lancement de débogage (supprimez l'ancienne et créez une nouvelle à partir de zéro).

--OR--

5b) Modifiez chaque configuration de débogage et pointez-la vers le nouveau gdb-python.exe ET pointez-la vers le.

Si vous rencontrez des problèmes:

--N'oubliez pas de changer l'emplacement dans le répertoire python dans le code python! Ce répertoire est créé par MinGW, alors n'allez pas cherchant à télécharger les jolies imprimantes, MinGW l'a fait pour vous à l'étape zéro. Allez simplement dans votre directeur d'installation MinGW, le dossier de partage, le dossier GCC (a le numéro de version) et vous trouverez python Cet emplacement est ce qui devrait être dans le script python chargé par GDB.

- De plus, le .gdbinit est un PITA, assurez-vous qu'il est nommé correctement et dans le dossier de travail de GDB qui n'est pas nécessairement où se trouve gdb-python.exe! Regardez votre sortie GDB lors du chargement de GDB pour voir si a) 'python-enabled' apparaît pendant le chargement et que les instructions dans le .gdbinit apparaissent.

- Enfin, j'ai eu beaucoup de problèmes avec les variables système. Si python vous donne 'ImportError', alors vous n'avez probablement pas défini PYTHONPATH ou PYTHONHOME.

- Le répertoire avec 'gdb-python27' (par exemple C:\MinGW\bin ') devrait également être sur votre chemin et si c'est le cas, cela rend la configuration d'Eclipse un peu plus agréable car vous n'avez pas besoin de mettre des chemins absolus . Mais quand même, le .gbdinit a parfois besoin d'un chemin absoulte. si cela fonctionne, vous verrez la sortie de gbd (traces console-> gdb) comme ceci au démarrage du débogueur:

835,059 4^done
835,059 (gdb) 
835,059 5-enable-pretty-printing
835,069 5^done
....
835,129 12^done
835,129 (gdb) 
835,129 13source C:\MinGW\bin\.gdbinit
835,139 &"source C:\\MinGW\\bin\\.gdbinit\n"
835,142 13^done
835,142 (gdb) 
5
William Symionow

Si vous suivez --- réponse acceptée et UPDATE2 et gdb reçoit une erreur comme celle-ci:

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py", line 54
    raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
                ^
SyntaxError: invalid syntax
/home/[you]/.gdbinit:6: Error in sourced command file:
Error while executing Python code.

C'est parce que votre version de gdb utilise Python 3 (confirmez avec cette réponse )

Une solution de contournement pour ce problème est expliquée ici

Sinon, suivez les instructions pour obtenir la source de svn: //gcc.gnu.org, qui est Python 3 compatible

2
acel

pour afficher les objets STL dans Eclipse CDT, je le fais et cela fonctionne très bien:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

(option numéro 2 dans le lien que vous avez envoyé)

J'espère que cela t'aides

1
Bob Yoplait