【发布时间】:2017-08-28 20:48:23
【问题描述】:
假设远程站点出现罕见错误,但没有使应用程序崩溃。发生这种情况时,我仍然想创建一个小型转储文件,以便我有一些信息可以使用,主要是调用堆栈。
伪代码如下:
try
{
doStuff();
}
catch(_com_error &e)
{
make_minidump(); // is this possible?
dump_com_error(e);
return FALSE;
}
我看到的所有示例都要求我必须导致应用程序崩溃(至少出于演示目的)才能生成转储文件,但我不想这样做。是否可以像这样创建转储文件?
我知道我可以去任务管理器并创建正在运行的进程的转储文件,同样我可以使用 ProcessExplorer 来实现相同的目标,所以看起来应该是可能的。
同时在我看到的所有示例中,只有当控件到达SetUnhandledExceptionFilter 时才会生成转储文件,当应用程序崩溃时会调用它!
作为最后的手段,生成转储文件的唯一方法是故意使应用程序崩溃,如下所示: 除了崩溃之外,这会产生任何有用的东西吗?因为我知道在这种情况下导致崩溃的原因。
LONG CALLBACK unhandled_handler(EXCEPTION_POINTERS* e)
{
make_minidump(e);
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
SetUnhandledExceptionFilter(unhandled_handler);
return *(int*)0;
}
【问题讨论】:
-
可能重复(未标记为 2009 年)stackoverflow.com/questions/1547211/…
标签: c++ debugging windows-7 windbg crash-dumps