Обработка исключений при завершении работы для Win32 / C ++

У меня есть процесс, который отлично обрабатывает исключения. Это вызывает:

_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

Каждый раз, когда происходит исключение, вызывается один из обработчиков, который создает для меня аварийный дамп. Жизнь хороша.

За исключением одного сайта клиента. Когда они закрывают процесс, возникает исключение, которое по каким-то причинам не маршрутизируется через эти вызовы, и они получают ошибку:

Инструкция в «0x101ba9df» ссылалась на память в «0x00000004». Память не может быть «прочитана». Нажмите OK, чтобы прекратить ....

Ссылка на память x000000004 выглядит так, как будто это нулевой указатель. И, глядя на этот адреспоявляется быть деструктором глобального объекта STL (вероятно, в вызове инициализации CRT, где очищаются глобальные переменные).

Прямо сейчас я застрял, потому что не могу получить диагностический дамп и стек вызовов и точно посмотреть, что происходит. Так....

Почему исключение не маршрутизируется через вышеупомянутые обработчики, а вместо этого показывается пользователю?

Есть ли способ скрыть это диалоговое окно (поскольку в этот момент не причиняется вреда)?

И есть ли способ отследить корневую ошибку?

Спасибо за любые идеи.

Ответы на вопрос(3)

Ваш ответ на вопрос