是的,它可以在 Windows 中。我不知道Linux,假设它也可以。
我们可以注册一个异常处理函数来响应throw
之前catch
的代码示例:
#include <iostream>
#include "windows.h"
#define CALL_FIRST 1
LONG WINAPI
VectoredHandler(
struct _EXCEPTION_POINTERS *ExceptionInfo
)
{
UNREFERENCED_PARAMETER(ExceptionInfo);
std::cout <<"VectoredHandler"<<std::endl;
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
PVOID handler;
handler = AddVectoredExceptionHandler(CALL_FIRST,VectoredHandler);
try {
throw 1;
}catch(...)
{
std::cout <<"catch (...)"<< std::endl;
}
RemoveVectoredExceptionHandler(handler);
std::cout << "end of main"<<std::endl;
return 0;
}
代码的输出是:
VectoredHandler
catch (...)
end of main
因此,您可以将核心转储到函数VectoredHandler
中。在VectoredHandler
调试器获得第一次机会通知之后,但在系统开始展开堆栈之前调用 。如果您的目的只是调试问题问题,那么您可以依靠调试器功能来处理第一次机会异常,不需要转储应用程序。
为了您的信息,您可能需要知道什么是第一次机会例外?在 windows 中了解 windows 如何调度异常。