我有一个处理异常的过程很好。它调用:
_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”处的内存。无法“读取”内存。单击确定以终止...."
x000000004 的内存引用看起来可能是一个空指针。并且查看该地址似乎是全局 STL 对象的析构函数(可能在清除全局变量的 CRT 的 initterm 调用中)。
现在我有点卡住了,因为我无法获得诊断转储和调用堆栈并确切地看到发生了什么。所以....
为什么异常没有通过上述处理程序路由,而是显示给用户?
有没有办法隐藏该对话框(因为此时没有造成伤害)?
有没有办法追踪根本错误?
感谢您的任何想法。