Manejo de excepciones de apagado para Win32 / C ++

Tengo un proceso que maneja grandes excepciones. Llama a

_set_se_translator(exception_trans_func); 
SetUnhandledExceptionFilter(UnhandledExceptionFilterHandler);
_set_purecall_handler(purecallHandler);
set_terminate(terminateHandler);
set_unexpected(unexpectedHandler);
_set_invalid_parameter_handler(InvalidParameterHandler);
atexit(exitHandler); //ignored during an expected exit
_onexit(onexitHandler); //ignored during an expected exit

Cada vez que ocurre una excepción, se llama a uno de los manejadores, lo que crea un volcado de seguridad para mí. La vida es buena.

Excepto en un sitio de cliente. Cuando cierran el proceso, hay una excepción que no se enruta a través de estas llamadas por algún motivo y reciben el error:

La instrucción en "0x101ba9df" hacía referencia a la memoria en "0x00000004". La memoria no puede ser leída". Haga clic en Aceptar para terminar .... "

La referencia de memoria de x000000004 parece que es probablemente un puntero nulo. Y mirando esa direcciónaparece para ser el destructor de un objeto STL global (probablemente en la llamada de initterm del CRT donde se limpian los globales).

Sin embargo, ahora estoy un poco atascado ya que no puedo obtener un volcado de diagnóstico y una pila de llamadas y ver exactamente lo que está sucediendo. Asi que....

¿Por qué la excepción no se enruta a través de los controladores anteriores y, en cambio, se muestra al usuario?

¿Hay alguna forma de ocultar ese diálogo (ya que no se está haciendo ningún daño en ese momento)?

¿Y hay una manera de rastrear el error de raíz?

Gracias por cualquier idea.

Respuestas a la pregunta(3)

Su respuesta a la pregunta