我目前使用SetUnhandledExceptionFilter捕获未处理异常的MiniDump,但是有时我会收到“R6025:纯虚函数”。

我了解纯虚拟函数调用是如何发生的,我只是想知道是否有可能捕获它们,因此我可以在那时创建一个MiniDump。

最佳答案

如果要捕获所有崩溃,您不仅需要执行以下操作:SetUnhandledExceptionFilter

我还将设置中止处理程序,purecall处理程序,意外,终止和无效的参数处理程序。

#include <signal.h>

inline void signal_handler(int)
{
    terminator();
}

inline void terminator()
{
    int*z = 0; *z=13;
}

inline void __cdecl invalid_parameter_handler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t)
{
   terminator();
}

并在您的主要内容中输入:
 signal(SIGABRT, signal_handler);
 _set_abort_behavior(0, _WRITE_ABORT_MSG|_CALL_REPORTFAULT);

 set_terminate( &terminator );
 set_unexpected( &terminator );
 _set_purecall_handler( &terminator );
 _set_invalid_parameter_handler( &invalid_parameter_handler );

上面的代码会将所有崩溃发送到未处理的异常处理程序。

07-22 12:47