【问题标题】:using windbg to on multiple .net framework versions在多个 .net 框架版本上使用 windbg
【发布时间】:2012-08-30 08:00:32
【问题描述】:

我负责在一个基于 .Net 的收缩包装桌面应用程序上从 Windows 错误报告中调试 minidump,该应用程序安装在全球近 50 万台 PC 上,所有 PC 都运行不同的操作系统版本和 .Net 框架的不同修补版本。为此需要以下 3 个文件的匹配版本

sos.dll
Mscorwks.dll
Mscordacwks.dll

我在过去下载 .msu 文件并从中提取这些文件方面取得了一定的成功,但我确信一定有更简单的方法。

我的问题是,是否有一个存储库可供我下载这些文件的正确版本以便调试小型转储?

【问题讨论】:

    标签: .net windbg


    【解决方案1】:

    您需要更多仅这三个文件才能可靠地调试/重现/分析现场问题。基本上,您需要所有这些(Windows、CLR 和(托管).NET 框架)。

    我不知道只有一些文件有任何存储库。您必须安装相应的版本。

    虽然您可以在同一个机器上安装多个版本的 .NET CLR(1.1、2.0、4.0),并通过 .loadby 命令将正确的 SOS.dll 加载到 WinDBG 中,但您可能需要为这些安装多个 Windows您支持的版本。

    此外,您还需要这些组件的(公共)符号,包括您​​自己的应用程序的(私有)符号,以进行任何有意义的调试。

    考虑到您有 3 个版本的应用程序已交付并仍受支持,运行在您仍支持的 4 个操作系统版本(例如 Windows Vista SP1、Windows 7、Windows 7 SP1 和 Windows 8)上,这为您提供了 12 种组合符号。

    这就是符号服务器的用途。您可以使用公共的 microsoft 符号服务器,但(当然)不包含您自己的应用程序的符号。

    鉴于您描述的应用程序的范围/大小,我认为最好设置一个内部符号服务器。这样可以保留客户仍在使用的应用的不同版本的所有符号(一项不能掉以轻心的任务)。

    推荐阅读:

    您还可以考虑设置source server 以允许您在调试会话中从源代码控制获取正确版本的源代码。

    【讨论】:

    • 符号服务器如何提供帮助?用户需要的是 dll,而不是符号。
    • @SevaTitov 是的,他也需要二进制文件,我忽略了那部分,抱歉。但要进行任何有意义的调试,他也需要符号。
    • 嗨,Christian,感谢您的回复,但我已经整理好了符号。我可以将符号路径设置为我的私有符号,并且 .symfix+ 对框架符号有效。真正的问题是,在您以有意义的方式将调试器连接到 .net minidump 之前,您需要上述 3 dll 的匹配版本。大多数从事基于 Web 的 ASP.Net 客户端-服务器应用程序的人没有这个问题,因为他们可以登录到他们的生产服务器并从那里获取这些 dll 的版本。我没有这种奢侈。
    • 我能理解。我们的生产服务器完全不受我们(开发人员)的限制。我们唯一的机会是建立一个相同的系统(包括补丁和所有)并尝试重现那里的任何问题:-|
    【解决方案2】:

    由于没有人能够给我这个问题的真正答案,我将提供我的“解决方法”。到目前为止,我一直在做的是搜索 Microsoft 支持站点以找到框架版本的 ms 更新包,下载它,然后使用 expand.exe 解压。然后可以将 WinDbg 连接到此版本,而不是运行您正在调试的机器的版本。这是一篇博文,详细解释了该过程http://sjbdeveloper.blogspot.com.au/2012/10/getting-correct-versions-of-net.html

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多