typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType,
 const PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
 const PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
 const PMINIDUMP_CALLBACK_INFORMATION CallbackParam);static MINIDUMPWRITEDUMP writeMiniDump = NULL;MINIDUMPWRITEDUMP GetWriteMiniDumpProcedureAddress()
{
if (HMODULE dll = LoadLibrary(TEXT("DBGHELP.DLL")))
{
return (MINIDUMPWRITEDUMP)GetProcAddress(dll, "MiniDumpWriteDump");
}
return NULL;
}
LONG WINAPI ExceptionFilter(struct _EXCEPTION_POINTERS* exception)
{
//程序崩溃
OutputDebugString(TEXT("ExceptionFilter: 检测到程序崩溃"));
return EXCEPTION_EXECUTE_HANDLER;
}void EnableDump()
{ ::SetErrorMode(SEM_FAILCRITICALERRORS);
if (writeMiniDump = GetWriteMiniDumpProcedureAddress()) 
{
SetUnhandledExceptionFilter(ExceptionFilter);
}
}int main()
{
EnableDump();
vector<int> aa;
aa.push_back(1); int b = aa[1];
 return 0;
}
上面的代码捕获不了结构化异常 奇怪

解决方案 »

  1.   

    stl 有些版本自己捕捉了异常处理, 
    重新设置了SetUnhandledExceptionFilter, 导致你前面的异常捕捉失效
      

  2.   

    在VC的debug模式下,vector的下标访问越界不是"UnhandledException" 而是 "HandledException"VC的vector代码
    reference operator[](size_type _Pos)
    { // subscript mutable sequence #if _HAS_ITERATOR_DEBUGGING
    if (size() <= _Pos)
    {
    _DEBUG_ERROR("vector subscript out of range");_DEBUG_ERROR
    ==>
    ::_CrtDbgBreak();
      

  3.   

    我是release,现在不弹错误框了,但是没进 ExceptionFilter这个函数
      

  4.   

    我倒,编译都搞不定
    要包含头文件的哇
    #include <dbghelp.h>
    #include <shellapi.h>
    #include <time.h>
    #include <utility>