Excepción Win32 no controlada

En tiempo de ejecución, cuando myApp.exe se bloquea, recibo una “excepción de Win32 no controlada”, pero ¿cómo puedo saber qué excepción se produjo? donde algo salio mal

Para una aplicación nativa de C ++, vea mi respuesta anterior aquí: Detectar / Redireccionar volcados de núcleo (cuando un software falla) en Windows para detectar la excepción no manejada (que también proporciona código para crear un volcado de locking que puede usar para analizar el locking más adelante. Si la falla se está produciendo en un sistema de desarrollo y luego en Visual Studio (supongo que está usando eso, si no otros IDEs tendrán algo similar), en Debug / Exceptions marque la casilla “Lanzar” para “Win32 Exceptions”.

Por lo general, Windows también le dará varios números hexadecimales. Lo más probable es que el código de excepción sea 0xC0000005 . Este es el código de una infracción de acceso. Cuando eso suceda, también tendrá tres bits adicionales de información: la dirección de infracción, la dirección infringida y el tipo de infracción (lectura, escritura o ejecución).

Windows no lo reducirá más que eso y, a menudo, no podría hacerlo. Por ejemplo, si pasa por el final de una matriz en su progtwig, es probable que Windows no se dé cuenta de que incluso estaba iterando sobre una matriz. Simplemente ve “leer: OK, leer: OK, leer: fuera de límites => error de página => VIOLACIÓN DE ACCESO”. Tendrá que descifrarlo a partir de la dirección de infracción (su código de iteración de matriz) y la dirección de infracción (la dirección de fuera de límites detrás de su matriz).

Si se trata de una aplicación .Net, podría intentar incluir un manipulado para el evento UnhandledException . Puede encontrar más información al respecto y algunos ejemplos de código aquí .

En general, es una buena señal de que su manejo de excepciones se ha interrumpido, por lo que puede valer la pena revisar su código y encontrar lugares que puedan arrojarse pero donde no se manejan las excepciones.

Usa el depurador. Puede ejecutar el progtwig y ver qué excepción se ha lanzado que mata su aplicación. Podría ser capaz de señalar la ubicación del lanzamiento. No he usado el depurador de VS para esto, pero en gdb puedes usar catch throw para forzar un punto de interrupción cuando se lanza una excepción, debería haber algo similar.