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;
}
上面的代码捕获不了结构化异常 奇怪
重新设置了SetUnhandledExceptionFilter, 导致你前面的异常捕捉失效
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();
要包含头文件的哇
#include <dbghelp.h>
#include <shellapi.h>
#include <time.h>
#include <utility>