有没有办法让客户在 "long" Windows API 通话期间强制崩溃(然后会生成小型转储)?

Is there a way a customer can force a crash (which then will generate a minidump) during a "long" Windows API call?

我们的应用程序 "hanging" 在客户站点(不是真的,它只是对一些 Windows 网络 API 调用的一个非常长的调用,其中有一个禁用的 VPN 适配器,它需要超时 - 分钟?)。我们无法复制它(我们没有他的 VPN 设置),但客户可以轻松复制它。

我们的应用程序在崩溃时会生成小型转储 (*.dmp) 文件。 有没有办法让最终客户立即产生崩溃(特别是在这个长时间的 API 调用期间),以便我们可以看到它挂在哪里?

我已经尝试 "Ending the Process" 通过任务管理器,但这必须 "gracefully" 关闭应用程序,因为 .dmp 文件不是使用任务管理器生成的。

这是 MFC C++ 应用程序的发布版本。

您可以使用 WinDbg 创建小型转储: http://wiki.zimbra.com/index.php?title=Creating_a_Core_Dump_from_a_Running_Process_using_WinDbg

这会告诉你它在哪里,什么时候坏了。显然,它不会使用您的处理程序来创建转储,但如果您只是担心挂起位置,这应该足够了。 Visual studio 具有从 运行 进程创建转储的类似功能。

您不需要崩溃来生成转储文件。只需打开任务管理器,转到 进程 选项卡,右键单击相应进程并选择 创建转储文件

一旦将转储写入磁盘,任务管理器将弹出一个对话框,通知用户转储文件所在的位置。默认情况下它是 %temp%\.DMP

对于 32 位应用程序,要创建 32 位转储文件,运行 来自 Window 的 SysWOW64 文件夹的 32 位版本的任务管理器:例如c:\Windows\SysWOW64\Taskmgr.exe

如果你想测试你的崩溃报告器,这会引发一个很好的访问冲突:

int *p = 0x0;
*p = 0xbadf00d;