2010-04-21 23 views
12

Tengo un estándar :: map < std :: string, std :: string> cont;cómo imprimir el valor de std :: map en gdb

Quiero ver cont ["some_key"] en gdb. Cuando estoy tratando

p cont [ "some_ket"]

estoy recibiendo este mensaje: Uno de los argumentos que trataron de pasar a operador [] No se pudo convertir a lo que quiere la función.

Estoy usando GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Gracias

+3

Lástima. gdb7.0 puede imprimirlo directamente: http://sourceware.org/gdb/wiki/STLSupport –

+0

Esta es la respuesta correcta. La característica ya existe, solo está usando una distribución anterior que no la ha integrado. Considere usar Fedora reciente, o construir las herramientas (puede ser simplemente gdb, aunque es posible que también necesite g ++ y binutils) usted mismo desde la fuente. –

Respuesta

6

La última versión de gdb tiene soporte de python, por lo que se podría escribir fácilmente una función para imprimir el contenido de cualquier estructura stl. Sin embargo, tendrías que aprender la API y escribir la secuencia de comandos. Afortunadamente, gcc 4.5 se enviará con los scripts Python necesarios para que gdb maneje inteligentemente las estructuras de datos stl.

EDITAR: no tiene que esperar para GCC 4.5 (que por cierto ya ha sido lanzado), puede simplemente grab the code from SVN.

1

Gdb no entiende la sobrecarga del operador C++.

+0

Según tengo entendido, ¿no hay ninguna forma de ver la clave-valor durante el proceso de depuración? –

+0

No es fácil. std :: map es una estructura de datos compleja. Puede seguir a los miembros privados (específicos de la implementación) y ver qué está sucediendo, pero es una tarea ardua. La respuesta de @ Eddy puede ayudar, pero no he jugado con eso en absoluto. –

6

Usted puede escribir sus propias funciones de volteo y llamarlos:

(gdb) call dump(m) 

ver en este tema: http://www.mail-archive.com/[email protected]/msg02109.html

Tengo curiosidad acerca de las macros de ayuda GDB.

+1

El [siguiente mensaje en ese hilo] (http://www.mail-archive.com/[email protected]/msg02189.html) muestra una macro GDB que funciona muy bien. El siguiente mensaje contiene algunas pequeñas mejoras. – mMontu

Cuestiones relacionadas