- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们在 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
并且只是设置 "correct" WER dump settings in the registry通常是一种可行的方法。
最佳答案
我使用的正是你列出的那些,加上 _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);
}
}
}
来源: 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/07/22/more-adventures-in-failing-to-crash-properly/
关于c++ - 在所有错误情况下,我需要采取哪些操作来获取故障转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591334/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!