我们的应用程序在客户站点“挂起”(实际上,它只是对一些Windows Networking API调用的长时间调用,其中有一个禁用的VPN适配器,它需要超时 - 分钟?)。我们无法复制它(我们没有他的VPN设置),但客户可以轻松复制它。
我们的应用在崩溃时生成小型转储(* .dmp)文件。 有没有办法让最终客户产生立即崩溃(特别是在这个长API调用期间),所以我们可以看到它挂在哪里?
我已尝试通过任务管理器“结束进程”,但必须“优雅地”关闭应用程序,因为.dmp文件不是使用任务管理器生成的。
这是MFC C ++应用程序的发布版本。
答案 0 :(得分:4)
您无需崩溃即可生成转储文件。只需打开任务管理器,转到进程选项卡,右键单击相应的进程并选择创建转储文件:
将转储写入磁盘后,任务管理器将弹出一个对话框,通知用户转储文件所在的位置。默认情况下,它是%temp%\<图片名称> .DMP :
对于32位应用程序,要创建32位转储文件,请从Window的SysWOW64文件夹运行32位版本的任务管理器:例如C:\的Windows \ Syswow64资料\ Taskmgr.exe中
答案 1 :(得分:0)
您可以使用WinDbg创建minidump: http://wiki.zimbra.com/index.php?title=Creating_a_Core_Dump_from_a_Running_Process_using_WinDbg
当你休息时,这会告诉你它在哪里。显然,它不会使用你的处理程序来创建转储,但如果你只是担心挂起位置,这应该就足够了。 Visual Studio具有与正在运行的进程创建转储类似的功能。
答案 2 :(得分:0)
如果你想测试你的崩溃记者,这将引发一个很好的访问冲突:
int *p = 0x0;
*p = 0xbadf00d;