代码之家  ›  专栏  ›  技术社区  ›  davefiddes

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

  •  0
  • davefiddes  · 技术社区  · 17 年前

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

    3 回复  |  直到 17 年前
        1
  •  2
  •   Bradley Grainger    17 年前

    How to use ADPlus to troubleshoot "hangs" and "crashes" ,以及有用的博客文章 Debugging Production Applications using ADPlus .

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

        2
  •  2
  •   Rob Walker    17 年前

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

        3
  •  1
  •   davefiddes    16 年前

    我知道如何做到这一点。只是我的技术有点笨重。所有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 如果进程没有最终挂起(例如,长时间的网络超时),并且您希望进程继续运行,则可以给出。