Una pequeña utilidad mía que hice para uso personal (escrita en C++) se estrelló al azar ayer (la he usado más de 100 horas sin problemas hasta ahora) y aunque normalmente no hago esto, me sentía un poco aventurero y quería probar y aprender más sobre el problema. Decidí entrar en el Visor de eventos de Windows y ver lo que había acumulado sobre el accidente:Análisis de un bloqueo en Windows: ¿qué nos dice el mensaje de error?
Faulting application StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Faulting module name : StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Exception code : 0xc0000005
Fault offset : 0x0002d160,
Faulting process id: 0x17b4
Faulting application start time: time 0x01ca238d9e6b48b9.
Mi pregunta es, ¿qué hacer cada una de estas cosas significan, y cómo iba a utilizar éstos para depurar mi programa? Esto es lo que sé hasta ahora: el código de excepción describe el error y 0xc0000005 es una violación de acceso a la memoria (intentó acceder a la memoria que no le pertenecía). Estoy específicamente interesado en saber más sobre lo siguiente:
- ¿Qué significa la compensación de fallas? ¿Representa eso la ubicación en el archivo donde ocurrió el error, o significa la "línea" de ensamblaje donde ocurrió el error? Conociendo la compensación de fallas, ¿cómo usaría un programa como OllyDbg para encontrar el código ensamblador correspondiente que causó el error? O, mejor aún, ¿sería posible (fácilmente) determinar qué línea de código en la fuente C++ causó este error?
- Es obvio que la marca de tiempo corresponde a la hora de UNIX de 32 bits en el momento del bloqueo, pero ¿qué significa el tiempo de inicio de la aplicación de 64 bits? ¿Por qué serían 64 bits si la marca de tiempo es 32?
Tenga en cuenta que soy principalmente un programador de C++, así que aunque sé algo sobre el montaje, mi conocimiento es muy limitado. Además, este realmente no es un problema grave que deba corregirse (y tampoco se reproduce fácilmente, dada la naturaleza del programa), solo lo uso como una excusa para obtener más información sobre lo que significan estos mensajes de error. La mayor parte de la información sobre estos registros de fallos que he encontrado en línea suele estar dirigida al usuario final, por lo que no me han ayudado mucho (como programador).
Gracias de antemano
0xc0000005 - acceso denegado ... – Mandrake
Para lectores futuros, '0xc0000005' no es acceso denegado, es 'una infracción de acceso ocurrida'. Código correcto, instalación incorrecta. El acceso denegado es el código 5 en las instalaciones de Windows, por lo que es '0x80070005', a menudo acortado a' 0x00000005'. – niemiro