2010-04-21 4 views
12

J'ai un std :: map < std :: string, std :: string> cont;comment imprimer la valeur std :: map dans gdb

Je veux voir cont ["some_key"] dans gdb. Quand je suis en train

p cont [ « some_ket »]

Je reçois ce message: L'un des arguments que vous avez essayé de passer à l'opérateur [] n'a pas pu être converti en ce que la fonction veut. J'utilise GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Merci

+3

Dommage. gdb7.0 peut directement l'imprimer: http://sourceware.org/gdb/wiki/STLSupport –

+0

C'est la bonne réponse. La fonctionnalité existe déjà, vous utilisez simplement une distribution plus ancienne qui ne l'a pas intégrée. Pensez à utiliser une version récente de Fedora, ou créez les outils (il se peut que ce soit simplement gdb, bien qu'il soit possible que vous ayez aussi besoin de g ++ et de binutils) depuis la source. –

Répondre

6

La dernière version de gdb a un support python intégré, de sorte que l'on pourrait facilement écrire une fonction pour imprimer le contenu de n'importe quelle structure stl. Cependant, vous devrez apprendre l'API et écrire le script. Heureusement, gcc 4.5 sera livré avec les scripts python nécessaires pour que gdb gère intelligemment les structures de données stl.

EDIT: vous n'avez pas à attendre GCC 4.5 (qui d'ailleurs a déjà été publié), vous pouvez simplement grab the code from SVN.

1

Gdb ne comprend pas la surcharge de l'opérateur C++.

+0

Si je comprends bien, il n'y a aucun moyen de voir la valeur-clé au cours du processus de débogage? –

+0

Pas facilement. std :: map est une structure de données complexe. Vous pouvez suivre les membres privés (spécifiques à la mise en œuvre) et voir ce qui se passe, mais c'est une corvée. La réponse d'Eddy peut aider, mais je n'ai pas du tout joué avec ça. –

6

Vous pouvez écrire vos propres fonctions de vidage et de les appeler:

(gdb) call dump(m) 

voir ce fil: http://www.mail-archive.com/[email protected]/msg02109.html

Je suis curieux de connaître les macros d'aide GDB.

+1

Le [message suivant sur ce sujet] (http://www.mail-archive.com/[email protected]/msg02189.html) montre une macro GDB qui fonctionne très bien. Le message suivant contient quelques petites améliorations. – mMontu

Questions connexes