Pregunta

Los fanáticos de Windbg afirman que es bastante poderoso y yo estoy de acuerdo.Pero cuando se trata de depurar contenedores STL, siempre me quedo atascado.Si la variable está en la pila, la !stl La extensión a veces lo descubre, pero cuando un contenedor con un tipo complejo (p. ej. std::vector<TemplateField, std::allocator<TemplateField> >) está en el montón o forma parte de alguna otra estructura, simplemente no sé cómo ver su contenido.

Agradezco cualquier consejo o sugerencia.

¿Fue útil?

Solución

Es posible que también desee probar esta extensión del depurador . Es una biblioteca llamada SDbgExt, desarrollada por Skywing .

Otros consejos

A menudo encuentro inadecuado el soporte del depurador para tipos de datos STL.Por esta razón estoy usando cada vez más marcos de registro y declaraciones de registro.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 conocimientos de depuración portátiles en su código y mantenerlos junto con el código.Por el contrario, el trabajo que realiza en el depurador suele ser efímero.

La extensión de Python para WinDbg (pykd) tiene un fragmento stlp.py que puede volcar el contenido del mapa.
Actualmente es compatible con la implementación del mapa STLPort. Probado en x86 y x64. Este artículo muestra cómo usarlo (está en ruso , pero los ejemplos se explican por sí mismos).

Tuve exactamente 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 depurador mejor que MDbg).

Esto no quiere decir que WinDBG sea menos potente, solo que tiene un nivel inferior (por ejemplo, intente hacer algo útil con volcados de memoria con Visual Studio; no puede).

De todos modos, para responder a su pregunta, puede usar Visual Studio para ver los tipos de datos usando algunos trucos:

  1. Inicie otra instancia de WinDBG, adjunte de forma no invasiva: cdb -p <PID> -pv. Esto suspenderá los hilos del refugiado. Ahora puede separar con seguridad el WinDBG original qd
  2. Adjunte Visual Studio y luego separe el WinDBG no invasivo <=>. Mire el STL y continúe como lo desee.
  3. Cuando necesite volver a WinDBG, vaya al paso 1, cambie por un WinDBG invasivo.

Generalmente termino aplicando un método toString() en muchas de mis clases. Esto muestra toda la información que considero importante, cualquier contenedor puede llamar a esto para mostrar la información de la clase en la consola

Use dt -r es decir, dt yourapp! class 7ffdf000 -r5

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top