Tengo un problema por el cual, durante una llamada a una rutina de biblioteca de un tercero, mi proceso finaliza. Estoy completamente incapaz de detectar esto en mi depurador. Esto puede estar relacionado con esta pregunta: How can I debug a win32 process that unexpectedly terminates silently?.¿Cómo puedo determinar por qué mi proceso termina?
Cuando paso una llamada a esta biblioteca, el proceso que se depura simplemente finaliza. Si esta finalización se debió a una excepción no controlada o una violación de acceso a la memoria, el depurador la habría atrapado. Así que mi mejor suposición es que el proceso de alguna manera termina normalmente.
lo que he intentado:
- puntos de interrupción poniente en
ExitThread
yExitProcess
- Configuración de manejadores de excepciones no controladas y parametros no válidos (
set_terminate
y_set_invalid_parameter_handler
) - Cambio
_set_abort_behavior
y_set_error_mode
. - Indicando al depurador que detenga la ejecución en todas las excepciones lanzadas.
Pero en vano, ninguno de los controladores se llama y ninguno de los puntos de interrupción se activan. ser arrojado
no relacionados (ver Boletín abajo)
veoEEFileLoadException
:Lo que he observado: Cuando se bloquea el proceso, veo dos cosas en la ventana de salida de depuración. Un google rápido de esta excepción no me da una respuesta clara a lo que significa esta excepción.First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x0030b5ac.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: 0xE0434352: 0xe0434352.
Cuando termina, todas las discusiones volver el mismo código de error (STATUS_INVALID_CRUNTIME_PARAMETER). Este código de error significa, por lo que puedo decir, que una de las funciones de tiempo de ejecución c ha recibido un parámetro no válido y la aplicación finaliza por razones de seguridad.
The thread 'Win32 Thread' (0x12c0) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xe04) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x53c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x116c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x16e0) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1420) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x13c4) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x40c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xc78) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xd88) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x16c8) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xcb8) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x584) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1164) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1550) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x474) has exited with code -1073740777 (0xc0000417). The program '[5140] Program.exe: Native' has exited with code -1073740777 (0xc0000417).
Lo que realmente quiero saber es lo que causa esto, y opcionalmente; ¿cómo puedo ver esto en el depurador?
actualización En cuanto a la EEFileLoadException
, de hecho, es lanzado antes de que el programa hace la llamada que hace que se termine, por lo que no está relacionado con la terminación del proceso.
actualización Acabo de leer que set_terminate
no funciona en el depurador por lo que está fuera de la cuestión. Y como mencioné en mi comentario, los manejadores se administran por subprocesos, por lo que no tengo acceso al controlador relevante.
Además, el programa probablemente se cuelga en un subproceso de trabajo al que no tengo acceso, por lo que es difícil establecer cualquier punto de interrupción/controlador en absoluto.
¿Hay alguna manera mejor de descubrir qué va mal?
me di cuenta de que el controlador de terminar no se llama ya que están instalados en una base por hilo y no tengo acceso a la rosca estrellarse. –
Estoy teniendo una situación similar a esta, excepto en mi caso, los mensajes TRACE tampoco se entregan a la Ventana de Salida. Cuando me conecté con WinDebug, descubrí que había una llamada 'DebugBreak()' que VS ignoraba, lo que provocó que el proceso 'terminara()', lo que dio como resultado 'El programa [0x2F74] 'OUTLOOK.EXE' salió con el código -1073740777 (0xc0000417) .' Lamentablemente, no puedo entender por qué Visual Studio está ignorando el programa que se supone que está depurando. –