39 votes

permettre une jolie impression pour gdb dans eclipse cdt

Je suis en train d'ajouter assez d'impression pour STL objets dans eclipse cdt. J'ai essayé de suivre les étapes décrites ici:

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

J'ai vérifié le python dossier, mais je n'arrive pas à obtenir ce fait...

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 une interface python, 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 de type de module...je n'ai pas la moindre idée de Python, donc je ne sais même pas ce qu'est un "module" est en Python....

Quelqu'un peut-il m'aider? Il est très important pour moi d'être en mesure de voir les informations de débogage, ou utile pour mettre de cette façon. Ou d'une certaine manière je peux debug même à partir de la console et de faire belle sortie de gdb, parce que si je vais imprimer une chaîne de caractères par exemple je reçois inutile de sortie....

En ce qui concerne, Alex

58voto

Riga Points 1012

C'est la solution qui fonctionne pour moi.

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

Obtenir python très imprimantes par l'exécution de

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

dans un répertoire de votre choix (c'est à dire $(HOME)/distribs/gdb_printers). Vous obtiendrez 'python' sous-répertoire dans la caisse de répertoire.

Mettez ceci dans votre $(HOME)/.gdbinit fichier avec chemin d'accès correct à très 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 fait assez d'impression utilisable via l'interface de ligne de commande de gdb ( >(gdb) p my_std_string).

Suivant explique l'utilisation pendant le débogage dans Eclipse.

Télécharger ( http://download.eclipse.org/eclipse/downloads/) le dernier Flux Stable de Construire ou de Version d'Eclipse (>=3.7 version).

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) dernière Eclipse C/C++ outils de Développement (Eclipse CDT).

Exécutez Eclipse et a choisi de l'espace de travail répertoire où vos options seront stockées (c'est à dire $HOME/projets). Cliquez sur Help->Install New Software... Cliquez sur Ajouter...->Archive... et choisir le CDT construire que vous venez de télécharger. Ensuite, vous devez choisir les composants à installer: cliquez sur CDT Caractéristiques Principales -> C/C++ Outils de Développement (et éventuellement d'autres composants de votre choix). Puis procéder à l'installation et redémarrer Eclipse.

Spécifier l'emplacement approprié de gdb et .gdbinit dans Eclipse et assurez-vous que la Jolie Impression est activée:

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

Maintenant, vous pouvez voir des conteneurs STL jolie-imprimé en vue des Variables pendant le débogage dans Eclipse.

D'autres commandes peuvent être utilisées pour faire gdb sortie plus décent:

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: en ce qui Concerne la faire fonctionner de vieux projets, voir le point 4) dans rustyx réponse ci-dessous.

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

10voto

rustyx Points 2722

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

1) Obtenir Python 2.7.x 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) Configurer Eclipse CDT utiliser C:\MinGW\bin\gdb-python27.exe comme le débogueur et votre .gdbinit le fichier de configuration.

4) Re-créer votre debug lancement de la session (supprimer l'ancien et d'en créer un nouveau à partir de zéro).

5voto

William Symionow Points 276

Je voudrais élargir la Windows 7 de réponse parce que certaines étapes clés sont laissés de côté:

C'est pour MinGW utilisateurs avec Eclipse CDT

0) Si vous ne disposez pas de python GDB, ouvrir un shell/commande et de l'utilisation MinGW-get.exe pour "installer" Python-activé GDB par exemple

   MinGw-get.exe install gdb-python

1a) Obtenir Python 2.7.x de http://python.org/download/ et l'installer

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

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

1c) Ajouter PYTHONHOME à votre CHEMIN d'accès

 %PYTHONHOME%;...

2a) Ouvrez un texte entrez, entrez les instructions suivantes. Avis de la 3e ligne est pointant vers l'endroit où les scripts python sont situés. Voir les notes ci-dessous sur 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: l'explorateur Windows ne vous laissera pas de nom d'un fichier qui commence par avec une période de l'explorateur. La plupart des modifications de texte (y compris le bloc-notes) qui vous permettra de. GDB init les fichiers sont comme " des scripts de commandes GDB que la CMM va exécuter au chargement.

2c) La".gdbinit' le fichier doit être dans le répertoire de travail de GDB (le plus probable c'est vos projets répertoire racine mais votre IDE peut vous le dire.

3) Ouvrez votre Eclipse (ou d'autres IDE) boîte de dialogue Préférences. Aller à la C++ Débogueur sous-menu.

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

5a) Re-créer tous vos debug configurations de lancement (supprimer l'ancien et d'en créer un nouveau à partir de zéro).

--OR--

5b) Modifier chaque configuration de débogage et de pointer vers le nouveau gdb-python.exe ET de pointer vers l'.

Si vous avez des questions:

--N'oubliez pas de changer l'emplacement de l'python dans le répertoire ci-dessus le code python! Ce répertoire est créé par MinGW, donc ne pas aller à la recherche de télécharger la jolie imprimantes, MinGW il l'a fait pour vous à l'étape zéro. Juste goto votre MinGW installer directeur, le dossier de partage, la GCC dossier (le numéro de version) et vous trouverez python dossier. Ce site est ce devrait être dans le script python chargé par GDB.

--Aussi, l' .gdbinit est un pain PITA, assurez-vous que son nom correctement et dans le dossier de travail de GDB ce qui n'est pas forcément là où gdb-python.exe est situé! Regardez votre GDB sortie lors du chargement de GDB pour voir si a) la "python-activé" s'affiche pendant le chargement et que les déclarations dans le .gdbinit font leur apparition.

--Enfin, j'ai eu beaucoup de problèmes avec les variables système. Si python vous donne "ImportError' est alors probable que vous n'avez pas mis le PYTHONPATH ou PYTHONHOME.

--Le répertoire 'gdb-python27' (par ex. C:\MinGW\bin") devraient également être sur votre chemin et si elle l'est, elle permet la mise en place de l'éclipse un peu mieux, parce que vous n'avez pas besoin de mettre des chemins absolus. Mais encore, parfois, l' .gbdinit besoin d'un absoulte chemin. si cela fonctionne, vous verrez la sortie de la cmm (console->gdb traces) de ce genre sur le 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) 

2voto

acel Points 41

Si vous suivez les accepté de répondre et UPDATE2 et gdb reçoit un message d'erreur comme ceci:

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 est à l'aide de Python 3 (à confirmer avec cette réponse)

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

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

1voto

Bob Yoplait Points 1186

pour afficher des objets STL dans Eclipse CDT, je le fais et tout fonctionne 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X