如何在客户机器上调试死锁的Windows应用程序

时间:2008-11-06 16:03:17

标签: windows debugging

我有一个多线程的Windows应用程序,偶尔会出现死锁。这不可避免地发生在客户系统上,而不是在软件测试时。获取应用程序当前状态的Windows Minidump的最简单方法是什么?如果它也可以终止应用程序,那么用户可以重新启动它并继续使用那个很棒的系统。

3 个答案:

答案 0 :(得分:2)

请参阅Microsoft支持文章How to use ADPlus to troubleshoot "hangs" and "crashes"以及有用的博文Debugging Production Applications using ADPlus

这两篇文章都是关于“ADPlus”的,这是一个随Windows调试工具提供的VBScript工具,可用于从生产环境生成小型转储(以后可以在开发机器上加载WinDbg)。 ADPlus有很多功能和很多选项,因此可能需要一些阅读,实验和练习才能找到在您的环境中使用它的最佳方式。

答案 1 :(得分:1)

我知道如何实现这一目标。这只是我的技术有点笨重。所有Windows 2000及更高版本的系统都有一个基本的命令行调试程序,作为默认安装的一部分,称为NTSD。我现在所做的就是:

ntsd -pn MyApp.exe

当调试器控制台出现时,我可以在调试器控制台中键入以下内容:

.dump c:\my-deadlock.mdmp
.kill

我正在寻找的东西更简洁,更容易通过电子邮件发送给客户才能运行。我已经看到它提到了某个地方(谷歌现在找不到)你可以使用drwtsn32.exe来提取崩溃转储并终止一个应用程序。

编辑:可以在某种程度上简化命令:

ntsd -pn MyApp.exe -c ".dump c:\my-deadlock.mdmp; .kill"

如果进程没有终止(例如长网络超时)并且您希望进程继续运行,则可以给出命令.detach

答案 2 :(得分:1)

在Vista中,您可以直接从任务管理器创建转储文件。右键单击进程选项卡中的进程,然后选择“创建转储文件”。

在Vista之前我更喜欢ntsd路由,因为虽然它不是完全用户友好的,但它可以在没有用户安装任何其他软件的情况下工作,并且指令实际上相当容易理解。