Suponiendo tener algo como esto:
#include <map>
int main(){
std::map<int,int> m;
m[1] = 2;
m[2] = 4;
return 0;
}
Me gustaría poder inspeccionar el contenido del mapa que ejecuta el programa desde gdb.
Si intento usar el operador de subíndice, obtengo:
(gdb) p m[1]
Attempt to take address of value not located in memory.
Usar el método de búsqueda no produce mejores resultados:
(gdb) p m.find(1)
Cannot evaluate function -- may be inlined
¿Hay alguna manera de lograr esto?
Las respuestas existentes a esta pregunta están muy desactualizadas. Con un GCC y GDB recientes, Just Works TM gracias al soporte integrado de Python en GDB 7.xy las bonitas impresoras libstdc ++ que vienen con GCC.
Para el ejemplo de OP obtengo:
Si no funciona automáticamente, verá el primer punto en la página de soporte de STL del wiki de GDB.
También puede escribir impresoras bonitas Python para sus propios tipos, consulte Impresión bonita en el manual de GDB.
fuente
Could not find operator[]
.Siempre está lo obvio: Defina su propia función de prueba ... Llámelo desde gdb. P.ej:
Y:
fuente
El
stl-views.gdb
solía ser la mejor respuesta que había, pero ya no.Esto aún no está integrado en la línea principal
GDB
, pero esto es lo que obtienes usando la rama 'archer-tromey-python' :fuente
Intente eliminar la referencia a los contenedores STL: en esta página: http://www.yolinux.com/TUTORIALS/GDB-Commands.html
fuente
Las respuestas anteriores funcionan y están bien. En caso de que esté utilizando stl-views.gdb, esta es la forma correcta de ver los mapas y los elementos que contiene. Deje que su mapa sea el siguiente:
std::map<char, int> myMap;
es decir,
pmap <variable_name> <left_element_type> <right_element_type>
ver los elementos en el mapa.Espero que ayude.
fuente
Puede solucionar el segundo problema (
Cannot evaluate function -- may be inlined
) asegurándose de que su compilador use información de depuración DWARF-2 (o 3 o 4) cuando compile su programa. DWARF-2 incluye información en línea, por lo que debería poder utilizar cualquiera de los métodos que describió para acceder a los elementos de sustd::map
contenedor.Para compilar con la información de depuración de DWARF-2, agregue la
-gdwarf-2
bandera a su comando de compilación.fuente