Mar*_* Ba 12 c++ windows crash-dumps visual-c++
我们在Windows上,我们希望在我们的应用程序意外退出的所有场景中获得崩溃转储(可能正在使用MiniDumpWriteDump
).
到目前为止,我们已经确定并设置了以下内容:
SetUnhandledExceptionFilter
对于未处理的异常(Win32以及"普通"C++)._set_invalid_parameter_handler
对于CRT无效的参数处理_set_abort_behavior
加上一个SIGABRT
处理程序来解释调用abort()
我们错过了什么吗?(模拟一些非合法调用的代码ExitProcess
,TerminateProcess
或其中一个exit
变体.)
我会注意到这里的问题与如何获得崩溃转储是正交的.例如,如果你想要一个崩溃转储abort
,你总是必须使用,_set_abort_behaviour
因为否则只是中止exit
s.
我还要注意,在Windows7 +上,不设置SetUHEF
并且只是在注册表中设置"正确的"WER转储设置通常是可行的方法.
我正好使用你列出的那些_set_purecall_handler
,加上这个方便的代码片段:
void EnableCrashingOnCrashes()
{
typedef BOOL (WINAPI *tGetPolicy)(LPDWORD lpFlags);
typedef BOOL (WINAPI *tSetPolicy)(DWORD dwFlags);
static const DWORD EXCEPTION_SWALLOWING = 0x1;
const HMODULE kernel32 = LoadLibraryA("kernel32.dll");
const tGetPolicy pGetPolicy = (tGetPolicy)GetProcAddress(kernel32, "GetProcessUserModeExceptionPolicy");
const tSetPolicy pSetPolicy = (tSetPolicy)GetProcAddress(kernel32, "SetProcessUserModeExceptionPolicy");
if(pGetPolicy && pSetPolicy)
{
DWORD dwFlags;
if(pGetPolicy(&dwFlags))
{
// Turn off the filter
pSetPolicy(dwFlags & ~EXCEPTION_SWALLOWING);
}
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http: //randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work/
他网站上的其他文章也帮助我理解了这一点:http : //randomascii.wordpress.com/2011/12/07/increased-reliability-through-more-crashes/ http://randomascii.wordpress.com/2012/ 7月22日/更多的冒险,在-没有到崩溃正确/
归档时间: |
|
查看次数: |
3064 次 |
最近记录: |