2008-09-27 12 views
10

Los fans de Windbg afirman que es bastante potente y estoy de acuerdo. Pero cuando se trata de depurar contenedores STL, siempre estoy atascado. Si la variable está en la pila, la extensión !stl a veces se da cuenta, pero cuando un contenedor con un tipo complejo (por ejemplo, std::vector<TemplateField, std::allocator<TemplateField> >) está en el montón o parte de alguna otra estructura, simplemente no sé cómo ver su contenido .Depuración de contenedores C++ STL en Windbg

Apreciar cualquier consejo, punteros.

Respuesta

2

También puede ser que desee dale una oportunidad a este debugger extension. Es una biblioteca llamada SDbgExt, desarrollada por Skywing.

+1

Esta extensión parece funcionar solo con VC7.0 ... –

3

A menudo encuentro que el soporte del depurador para los tipos de datos STL es inadecuado. Por esta razón, estoy usando cada vez más logging frameworks and logging statements. Solía ​​pensar que estos son para personas que no pueden usar un depurador, pero ahora me doy cuenta de que ofrecen un valor real. Le permiten incorporar el conocimiento de depuración portátil en su código y mantenerlo junto con el código. Por el contrario, el trabajo que realiza en el depurador suele ser efímero.

0

Suelo terminar pegando un método toString() en muchas de mis clases. Esto muestra toda la información que consideren importantes, los contenedores pueden llamar a esto para mostrar la información de clase en la consola

0

Uso dt dt es decir, -r yourapp! Clase 7ffdf000 -R5

1

Tuve la misma pregunta hace algún tiempo. Mi respuesta es que Visual Studio es realmente un mejor depurador para STL y tipos complejos (al igual que Visual Studio es simplemente un mejor depurador que MDbg).

Esto no quiere decir que WinDBG sea menos potente, solo que es de nivel inferior (por ejemplo, intente hacer cualquier cosa útil con volcados de emergencia utilizando Visual Studio; no puede).

De todos modos, para responder a su pregunta, puede utilizar Visual Studio para mirar a los tipos de datos que utilizan algunos trucos:

  1. iniciar otra instancia de WinDBG, conecte de forma no invasiva: cdb -p <PID> -pv. Esto suspenderá los hilos del debugee. Ahora puede separar con seguridad el WinDBG original qd
  2. Adjuntar Visual Studio a él, y luego desconectar el no invasivo WinDBG qd. Mire la STL y continúe como desee.
  3. Cuando necesite volver a WinDBG, vaya al paso 1, cambie con un invasivo WinDBG.
2

Python extension for WinDbg (pykd) tienen el fragmento stlp.py que puede volcar los contenidos del mapa.
Actualmente es compatible con la implementación del mapa STLPort. Probado en x86 y x64. Este article muestra cómo usarlo (está en ruso, pero los ejemplos se explican por sí mismos).

Cuestiones relacionadas