我遇到了一个问题,即当异常代码c0000374引发时,我传递给SetUnhandledExceptionFilter的函数没有被调用.但它可以正常使用异常代码c0000005.然后我尝试使用AddVectoredExceptionHandler,它没有问题,处理函数被正确调用.
这是API错误吗?我可以在任何地方使用AddVectoredExceptionHandler而不是SetUnhandledExceptionFilter吗?
这两个功能都能正常工作
// Exception code c0000005
int* p1 = NULL;
*p1 = 99;
Run Code Online (Sandbox Code Playgroud)
只有AddVectoredExceptionHandler才能捕获此异常.(为了证明它不依赖于运行时库,我手动引发异常并且结果相同.)
// Exception code c0000374
RaiseException(0xc0000374, 0, 0, NULL);
Run Code Online (Sandbox Code Playgroud)
测试程序.
#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 …Run Code Online (Sandbox Code Playgroud)