c++ - huella - Informes de bloqueos para aplicaciones MinGW
bloqueo de aplicaciones para iphone (1)
Tengo una aplicación c ++ compilada con MinGW para la cual he estado recibiendo quejas de los clientes. Así que, además de registrar en gran medida las partes que podrían estar fallando (antes de lanzar una nueva versión), he estado buscando un reportero de fallos que me ayude a encontrar el seguimiento de la pila y cualquier otra información útil de depuración cuando surja un error.
¿Existe alguna herramienta que sea compatible con las aplicaciones de MinGW? (Parece que existe una estrecha relación entre el compilador y la estrategia de informes de fallos, por lo tanto, la pregunta).
¿Hay alguna herramienta de Windows que me pueda ayudar? La aplicación se está ejecutando principalmente en máquinas con Windows XP.
Ser capaz de escribir información en un archivo es suficiente para mis propósitos. Entonces puedo pedirle a mi cliente que me envíe la información por correo.
He estado buscando en google-breakpad y SetUnhandledExceptionFilter , pero sigo sin saber si serán útiles de alguna manera. Otras utilidades de informes de crashrpt , como crashrpt , están diseñadas para Visual C ++, por lo que supongo que probarlas con MinGW no tiene mucho sentido.
EDITAR: algunos enlaces útiles sobre el tema.
En realidad, el problema no es conseguir que los informes de errores funcionen. Eso es bastante trivial con las funciones de la biblioteca DbgHelp y, más prominentemente, MiniDumpWriteDump
. Sin embargo, recuerde que debe redistribuir la biblioteca DbgHelp en sistemas más antiguos y observar los requisitos de versión para las funciones a las que pretende llamar: las versiones más nuevas de Windows vienen con al menos alguna versión de esta biblioteca.
Su problema con el uso de un compilador que no sea MS (el problema también existe con Embarcadero, anteriormente Borland, productos, por ejemplo, o Watcom) es que los símbolos de depuración creados no tienen sentido para la biblioteca DbgHelp, que es la instalación estándar para la depuración en Windows. El formato de PDB es en gran parte no documentado (para algunas pistas busque los términos: PDB de Sven Schreiber ) y las bibliotecas utilizadas para crearlos no son "públicas" en el mismo sentido que la biblioteca DbgHelp; esta última solo se puede usar para leer / analizar Los símbolos de depuración creados. Son parte de los productos de Visual Studio y normalmente se denominan algo así como mspdbXY.dll (donde XY son dígitos decimales).
Por lo tanto, si desea crear informes de errores, le sugiero que en lugar de concentrarse en los "problemas del compilador", concéntrese en los problemas del depurador. Aquí están las direcciones generales en las que puedes ir:
- Use un depurador que entienda su formato de depuración particular (GDB para DWARF en MinGW, IIRC)
- Use un depurador que entienda múltiples formatos (IDA viene a la mente y también tiene otras ventajas;))
- Escriba una extensión a algo como WinDbg para dar sentido a sus símbolos de depuración (DWARF) o archivos
.map
más genéricos (soy consciente de que dichas extensiones se escribieron hace algunos años para los archivos de.map
Borland) - Aprenda el lenguaje ensamblador y use las herramientas disponibles (WinDbg o más generalmente la biblioteca DbgHelp) sin símbolos (probablemente una curva de aprendizaje demasiado pronunciada a menos que ya lo sepa)
Como extensión a 4, también puede dejar que GCC cree los archivos .S
(ensamblado) durante la compilación para poder hacer una referencia cruzada del código fuente y el volcado de memoria cuando se trabaja sin el soporte de símbolos.
Dado que prefiero GDB en plataformas unixoid, pero WinDbg y otros depuradores en Windows, realmente no puedo decir si hay soporte para el formato de volcado de MiniDumpWriteDump
real (creado con MiniDumpWriteDump
) en GDB en Windows, así que no estoy seguro de qué formato Se espera por GDB en este caso.
Por cierto: si usa Windows XP o superior y puede confiar en ese hecho, use AddVectoredExceptionHandler
lugar de SetUnhandledExceptionFilter
para preparar la escritura del volcado de SetUnhandledExceptionFilter
.