c++ - son - ¿Cómo crear minivolcado para mi proceso cuando se bloquea?
para que sirve el volcado de memoria (5)
No puedo crear un minivolcado de mi proceso cambiando la configuración del sistema. Entonces mi pregunta es:
¿El sistema creará un minivolcado para un proceso de usuario cuando falle?
En caso afirmativo, ¿qué configuración necesito configurar?
O tengo que crear minivolcado programáticamente.
Qué tan efectivos son los minivolcados mientras se investiga un accidente
Estoy usando Windows XP, C ++, VC6
Gracias a todos por ver y responder gracias especiales a gimpf, busqué en Google y msdn.
Encontré un excelente artículo sobre debugInfo.com. Vale la pena leerlo:
Si le sobran unos cuantos dólares, vale la pena ver AQtrace . Esto tiene muchas de las ventajas del bloqueo que ocurre dentro del depurador, mientras se ejecuta en una máquina de usuario final remota.
Terminé usando CrashRpt en Windows (me requirieron mover toda la base de código y la cadena de herramientas de MinGW al compilador nativo de Microsoft C / C ++) y Google-breakpad en Linux.
Usamos Google Breakpad en Firefox, aunque eso requiere al menos Visual C ++ 2003. El beneficio adicional es que también es compatible con OS X y Linux.
Necesita programar programáticamente un minivolcado (con una excepción, consulte el siguiente enlace). CodeProject tiene un buen artículo sobre MiniDumps . Básicamente, desea utilizar dbghelp.dll
y utilizar la función MiniDumpWriteDump()
(consulte MSDN en MiniDumpWriteDump ).
La efectividad de dichos vertederos depende en gran medida de la aplicación. A veces, para binarios optimizados, son prácticamente inútiles. Además, sin experiencia, los errores de corrupción de montón / pila te llevarán por mal camino.
Sin embargo, si el optimizador no fue demasiado difícil para usted, hay una gran clase de errores en los que los volcados son útiles, es decir, todos los errores donde es útil tener un stack-trace + valores de las variables utilizadas localmente, es decir, muchos pure-virtual -función de llamadas (es decir, orden de destrucción incorrecta), violaciones de acceso (sin acceso no inicializado o falta de cheques NULL), etc.
Por cierto, si su política de mantenimiento de alguna manera lo permite, transfiera su aplicación de VC6 a algo aceptable, como VC8 o 9. Te harás un gran favor.