2012-01-05 14 views
5

¡Fue un error que acabo de encontrar! Hurra. El error se debió a un downcasting incorrecto, y de hecho yo estaba usando static_cast en lugar de dynamic_cast.¿WinDbg puede detectar la corrupción del montón de memoria debido a downcasting no válido?

Mi aplicación es bastante grande y multiproceso e interactúa con otras aplicaciones. Entonces la depuración es muy difícil. He intentado utilizar WinDbg, GFlags y Application Verifier sin resultados. Ciertamente porque no sé cómo usar estas herramientas.

¿Es posible encontrar una corrupción en el montón de memoria debido a un downcasting no válido, con el uso de herramientas como WinDbg? Si es así, ¿cómo?

+0

Lo que fue un error que acaba de encontrar? Esta publicación no tiene ningún sentido. –

+0

@Lightness: ouch, ¿en serio? – Guillaume07

+0

¿De verdad qué? Tus primeras dos oraciones no tienen sentido. Hablan sobre algún error que no has introducido en la pregunta. ¿Qué error? –

Respuesta

9

WinDbg! -s -v montón de comandos puede revelar un montón corrupta

0:008> !heap -s -v 

    Heap  Flags Reserv Commit Virt Free List UCR Virt Lock Fast 
       (k)  (k) (k)  (k) length  blocks cont. heap 
----------------------------------------------------------------------------- 
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4 
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous 
1

EDITAR: Los comentarios dejaron en claro que las opciones que no son de Windows no son viables. En ese caso he tenido buena suerte con Purify antes, pero desafortunadamente es $$$. Sin embargo, no estoy familiarizado con otras herramientas de comprobación de memoria de Windows.

Con respecto a este caso específico, cada vez que se encuentre abatido, dedique al menos un minuto a pensar en una interfaz o diseño alternativo que podría eliminar la necesidad. Los errores y advertencias del compilador, y un diseño sólido pueden encontrar muchos errores que, de lo contrario, tardarían horas en encontrar.

+0

recomendando valgrind para un usuario de Windows? – PlasmaHH

+0

@Mark B: para que confirme que es posible con valgrind tener en entrada el volcado de la aplicación cuando se cuelga y en la salida la línea de código que causa el problema? – Guillaume07

+0

@PlasmaHH: sí, de hecho, pero creo que existe la herramienta equivalente en Windows – Guillaume07

Cuestiones relacionadas