Question

Lors de l'utilisation de CDT, j'aimerais que std :: string apparaisse dans la fenêtre de débogage 'variable' avec la chaîne qu'il contient. Par exemple, s'il contient actuellement le mot "historique" , j'aimerais que historique apparaisse dans la fenêtre du débogueur intitulée "variables".

Je pense qu’il existe un moyen général de le percer dans les objets mais je ne peux pas le mettre le doigt dessus. Est-ce que quelqu'un sait comment faire cela?

Cela me serait également utile lors de la sortie d'un seul champ à partir d'un objet complexe.

Merci, Bill

Était-ce utile?

La solution

Notez que vous ne souhaitez pas choisir une méthode générale d'exploration dans les objets. vous voulez imprimer de jolis conteneurs STL.

Je pense que CDT délègue cela au backend du débogueur; c’est-à-dire qu’il appartient à votre débogueur (gdb, peut-être?) d’informer CDT de la valeur d’une variable et de son extension.

Edit: Je ne pense pas que le backend GDB fourni avec CDT prenne en charge "intelligent". affichage des conteneurs STL. Si cela vous intéresse vraiment, je vous suggère de contacter l'équipe de développement de CDT à l'adresse cdt-dev@eclipse.org.

Mettre à jour / Modifier: Voir les autres réponses ci-dessous pour savoir comment activer les jolies imprimantes dans CDT.

Autres conseils

Afficher les conteneurs stl avec eclipse / gdb a également été une douleur importante pour moi pendant longtemps.

Mais maintenant, je viens de découvrir que la dernière version de gdb avec python activé peut vous aider.

Voici ce que j'ai fait (avec Ubuntu Linux 8.10):

  • Installer la version gdb > = 6.8.50 (par exemple, à partir de debian experimental )
  • Créez un fichier nommé .gdbinit dans la racine de votre projet avec le contenu suivant:

    import python gdb.libstdcxx.v6.printers

Les conteneurs stl seront désormais jolis imprimés .

Si vous voulez vérifier si vous avez déjà un gdb activé pour python (ou si votre nouvelle installation a fonctionné):

  • Démarrer gdb à partir de la console
  • À l'invite de gdb, exécutez ce qui suit

    (gdb) Python print 'La GDB activée pour Python fonctionne!'

  • Si la commande ci-dessus produit ce que nous attendons, alors elle fonctionne.

Pour plus de détails, consultez ce blog .

Windows 7

Obtenez les jolies imprimantes: svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

Configurez Eclipse avec: Debug Gdb C / C ++:

C:\MinGW\bin\gdb-python27.exe
C:\MinGW\bin\.gdbinit

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

Ceci est destiné aux utilisateurs de MinGW avec Eclipse CDT

0) Si vous n'avez pas Python GDB, ouvrez un shell / une 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 à partir 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, entrez les déclarations suivantes. Notez que la 3ème ligne est     pointant 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: l’explorateur Windows ne vous laissera pas nommer un fichier commençant par     avec une période d'explorateur. La plupart des modifications de texte (y compris le Bloc-notes) vous le permettront. GDB init     les fichiers sont comme des "scripts" de commandes GDB que GBD exécutera lors du chargement.

2c) Le fichier '.gdbinit' doit se trouver dans le répertoire de travail de GDB (probablement     le répertoire racine de vos projets mais votre IDE peut vous le dire.

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

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

5a) Recréez toutes vos configurations de lancement de débogage (supprimez l’ancienne et créez-en une nouvelle à partir de rien).

--OR--

5b) Éditez 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 du répertoire python dans le code python ci-dessus!    Ce répertoire est créé par MinGW, alors ne cherchez pas à télécharger les jolies imprimantes, MinGW    l'a fait pour vous à l'étape zéro. Allez juste votre directeur d’installation MinGW, le dossier de partage,    le dossier GCC (avec le numéro de version) et vous trouverez le dossier python. C'est ce lieu    devrait être en 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! Examinez votre sortie GDB lors du chargement de GDB pour voir si un "python-enabled" apparaît pendant le chargement et si les instructions du fichier .gdbinit apparaissent.

- Enfin, j'ai eu beaucoup de problèmes avec les variables système. Si python vous donne 'ImportError', il est fort probable que vous n'ayez pas défini PYTHONPATH ni PYTHONHOME.

- Le répertoire avec 'gdb-python27' (par exemple, C: \ MinGW \ bin ') devrait également se trouver sur votre chemin. Si c'est le cas, la configuration de l'éclipse est un peu plus agréable car vous n'avez pas besoin de la mettre dans des chemins absolus. Mais encore, parfois, le .gbdinit a besoin d'un chemin absolu. si cela fonctionne, vous verrez la sortie de gbd (traces de 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) 

Le seul moyen que j'ai trouvé consiste à utiliser la ligne de commande GDB:

  1. Dans la fenêtre Déboguer , cliquez sur gdb . C'est juste en dessous de la trace de la pile.
  2. Dans la fenêtre Console , utilisez la commande GDB up pour accéder au cadre de pile souhaité
  3. .
  4. Encore une fois dans la fenêtre Console , utilisez la commande print pour afficher le std :: string variable:

    mystère

Mais cela pose beaucoup de problèmes.

J'ai remarqué que lorsque je survole la variable, les champs de la chaîne std :: string sont affichés, mais ils sont tronqués. Je ne vois donc pas la partie la plus intéressante: la valeur de la chaîne. Il existe peut-être un moyen d'augmenter la longueur maximale de la valeur affichée.

Votre meilleur coup consiste à utiliser des macros gdb que vous pouvez taper sur la console gdb et qui peuvent être ouvertes dans la fenêtre Console / Debugger dans eclipse. Vous pouvez les trouver ici: http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.01. txt

ça ne sera pas automatique en vol stationnaire, mais vous devez taper ce qui est fatiguant .... mais même en 2009, l'éclipse CDT n'a pas réussi à nous apporter de belles fonctionnalités de débogage, c'est donc votre meilleur tireur.

À RPSENG: merci pour la pointe rpseng! ça marche bien! malheureusement, il semble que mon éclipse (Ganymede) soit si confuse qu’elle ne découvrira plus le type de pointeurs sur les instances de mes propres classes et leur héritage, si bien que passer à travers les variables membres de ces pointeurs n’est plus possible. Travaillez-vous avec CDT 6.0 et fonctionne-t-il mieux là-bas?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top