c++ - 捕获 R6025 纯虚拟调用

标签 c++ windows minidump dbghelp

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

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

最佳答案

如果你想捕捉所有崩溃,你必须做的不仅仅是:SetUnhandledExceptionFilter

我还将设置中止处理程序、纯调用处理程序、意外、终止和无效参数处理程序。

#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 );

以上内容会将所有崩溃发送到您的未处理异常处理程序。

关于c++ - 捕获 R6025 纯虚拟调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224163/

相关文章:

c++ - 用于嵌入式脚本/文本处理引擎的 Python vs Lua

c++ - 如何在C++中取每第n个元素的平均值

java - 如何让程序访问文件系统中的所有文件?

c++ - 设置 Windows 计时器,访问被拒绝

.net - 迷你转储对 .NET 中的调试有用吗

c++ - 无法创建光栅堆栈,因为我无法连接字符串(目录名 + 文件名)

c++ - 无法将某些函数从一个文件移动到另一个 C++

windows - 如何创建行为类似于 .cmd/.bat 的文件扩展名?

c# - 如何打开 C# 故障转储 (Minidump)

c# - xxx.exe : 0xC0000005: Access violation 中 0x782260ec 处的第一次异常