2009-12-17 57 views
1

我们有一个.Net应用程序,由混合托管代码和非托管代码组成。我们有许多用户在使用我们的应用程序时遇到BSOD的报告。这些蓝屏出现在不同版本的Windows上。大多数情况下,XP只有一个用户声称它发生在Windows 7上。一些用户在做一件事情时看到它发生,另一些用户在做完全不同的事情时看到它发生。当然,我们不能重现问题。如何追踪由(用户模式)应用程序触发的死亡蓝屏

不用说,我很难过。用户模式应用程序不应该能够蓝屏OS,所以我们遇到了一个普通的内核空间应用程序中的错误,可能是错误的防病毒软件?

有没有人有关于如何跟踪这样的事情的任何提示?我们无法访问发生这种情况的计算机,因此我们无法连接内核调试器或类似的东西。

+0

第一个建议是问你的用户有什么样的硬件,他们安装了什么软件 - 看你是否能找到任何常见的模式。 – 2009-12-17 23:14:50

+0

具有管理员权限的用户模式应用程序可以轻松地在Vista/7中对操作系统进行蓝屏。只需要杀死csrss.exe;) – 2009-12-17 23:17:47

+1

我得到了一个用户的小型转储文件,发现问题出在windrvnt.sys中,这显然是由一个老版本的FolderLock(第三方应用程序)使用的。告诉他卸载FolderLock并修复了蓝屏。我假设其他用户将是类似的。 – mhenry1384 2009-12-21 22:33:58

回答

1

关于你能做的唯一的事情就是说服用户向您发送数据:

  • 崩溃转储。在您的网站上发布walkthru,展示如何启用完整/小型转储以及在哪里找到它们。这里有一个KB article with the gory details - 可能想简化这个截图&等。
  • 安装的软件。最好找到一个为他们收集这些信息的工具;人类不是特别可靠或彻底。 WinAudit looks good
  • 安装的硬件&驱动程序。 (同上)
+0

我知道如何在应用程序崩溃时生成一个小型转储程序,但是如何在操作系统崩溃时生成一个小型转储程序?我的意思是,操作系统已经崩溃了,所以没有什么可以写出转储。 – mhenry1384 2009-12-18 14:07:37

+0

假设它确实是一个操作系统崩溃(内核恐慌),而不是有人在电源线上跳闸,你可以让内核自己做一些原始的错误处理。据我所知,它从一开始就在新西兰。我已通过其他链接更新了我的答案。 – 2009-12-18 15:16:22

+0

我很尴尬,我不知道操作系统在bluescreens(默认情况下)时创建了小转储。我只是尝试使用http://www.osronline.com/article.cfm?article=153复制,它确实。 – mhenry1384 2009-12-21 16:48:13

0

你可以得到一个崩溃/迷你转储的副本?

如果是这样,您可以使用WinDbgSOS来确定代码在炸毁时的位置。

Tess Fernandez在使用低级工具进行托管调试方面有很好的博客。