Why SetUnhandledExceptionFilter cannot capture some exception but AddVectoredExceptionHandler can do
Posted
by
wrongite
on Stack Overflow
See other posts from Stack Overflow
or by wrongite
Published on 2013-10-29T11:26:01Z
Indexed on
2013/10/29
15:54 UTC
Read the original article
Hit count: 1676
I have experienced a problem that the function I passed to the SetUnhandledExceptionFilter didn't get called when the exception code c0000374 raising. But it works fine with the exception code c0000005. Then I tried to use the AddVectoredExceptionHandler instead, and it didn't have the problem, the handler function get called correctly.
Is it the API bug? Can I use AddVectoredExceptionHandler instead of SetUnhandledExceptionFilter everywhere?
The both functions work correctly with
// Exception code c0000005
int* p1 = NULL;
*p1 = 99;
Only AddVectoredExceptionHandler can capture this exception.
// Exception code c0000374
int* p2 = new int;
delete p2;
delete p2;
Test program.
#include <tchar.h>
#include <fstream>
#include <Windows.h>
LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo)
{
std::ofstream f;
f.open("VectoredExceptionHandler.txt", std::ios::out | std::ios::trunc);
f << std::hex << pExceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
f.close();
return EXCEPTION_CONTINUE_SEARCH;
}
LONG WINAPI TopLevelExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo)
{
std::ofstream f;
f.open("TopLevelExceptionHandler.txt", std::ios::out | std::ios::trunc);
f << std::hex << pExceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
f.close();
return EXCEPTION_CONTINUE_SEARCH;
}
int _tmain(int argc, _TCHAR* argv[])
{
AddVectoredExceptionHandler(1, VectoredExceptionHandler);
SetUnhandledExceptionFilter(TopLevelExceptionHandler);
// Exception code c0000374
int* p2 = new int;
delete p2;
delete p2;
// Exception code c0000005
int* p1 = NULL;
*p1 = 99;
return 0;
}
© Stack Overflow or respective owner