Tengo un cliente que está recibiendo un accidente reproducible 100% que no puedo reproducir en mi programa compilado en Visual Studio 2005. Los envié una versión de depuración de mi programa y mantuvo todos los archivos PDB y DLL a mano. Me enviaron el archivo de minivolcado, pero cuando lo abro me sale:Depuración de un minidump en Visual Studio, donde la pila de llamadas es nulo
"excepción no controlada en 0x00000000 en minidump.dmp: 0xc0000005: violación de acceso de lectura ubicación 0x00000000."
A continuación, la pila de llamadas muestra única "0x00000000()" y el desmontaje me muestra un volcado de la memoria en 0x0. Configuré el servidor de símbolos, cargué mis símbolos de PDB, etc. Pero no veo ninguna forma de saber cuál de las muchas DLL realmente causó el salto a nulo. Este es un proyecto grande con muchas dependencias, y algunas de ellas son binarias para las que no tengo el origen ni los PDB, ya que estoy usando una API como tercero.
Entonces, ¿cómo de qué sirve este minivolcado? ¿Cómo veo qué DLL causó el bloqueo? Nunca antes había usado minivolcados para la depuración, pero todos los tutoriales que he leído parecen mostrar al menos un nombre de función u otra cosa que le da una pista en la pila de llamadas. Acabo de obtener una línea que apunta a nulo.
También he intentado usar "Depende" para ver si había alguna dependencia DLL que no fue resuelto; sin embargo, en mis tres máquinas de prueba con varios SO de Windows, parece que obtengo tres conjuntos diferentes de dependencias DLL de SO (y aún no puedo replicar el bloqueo); así que esto no parece ser un método particularmente confiable para diagnosticar el problema.
¿Qué otros métodos están disponibles para determinar la causa de este problema? ¿Hay alguna manera de dar un paso atrás en una instrucción para ver qué DLL saltó a nulo?
ld ModuleName cargará los símbolos de un módulo. ! analyze -v le dará un seguimiento de la pila. Entre esos dos, debe tener suficiente información para comenzar. http://windbg.info/doc/1-common-cmds.html tiene una lista de comandos WinDbg comunes. –
Tienes razón Vanessa - Estaba usando el depurador integrado en Visual Studio, pero cuando uso WinDbg obtengo el nombre del módulo. ¿Está la lección aquí: no use el depurador de Visual Studio para corroer la pila de análisis post-mortem? – Piers
Cada vez que he visto esto ha sido provocado llamando a un puntero de función nulo. – paulm