Bri*_*ndy 16
如果你想捕获所有崩溃,你必须做的不仅仅是: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();
}
Run Code Online (Sandbox Code Playgroud)
在你的主要内容中:
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 );
Run Code Online (Sandbox Code Playgroud)
以上将发送所有崩溃到您未处理的异常处理程序.
180*_*ION 12
在这里看到这个答案的问题"纯虚函数调用"崩溃来自何处?.
为了帮助调试这些类型的问题,您可以在各种版本的MSVC中替换运行时库的purecall处理程序.您可以通过使用此签名提供自己的功能来执行此操作:
int __cdecl _purecall(void)
Run Code Online (Sandbox Code Playgroud)
并在链接运行时库之前链接它.这使您可以控制检测到纯调用时发生的情况.一旦掌握了控制权,就可以做一些比标准处理程序更有用的事情.我有一个处理程序,可以提供purecall发生位置的堆栈跟踪; 请参阅:http: //www.lenholgate.com/archives/000623.html 了解更多详情.
(注意,您也可以调用
_set_purecall_handler()
在某些版本的MSVC中安装处理程序).
所以,在你的purecall处理程序中,制作你的minidump.
归档时间: |
|
查看次数: |
8566 次 |
最近记录: |