【问题标题】:How do I debug around module overlap in windbg using SOS?如何使用 SOS 围绕 windbg 中的模块重叠进行调试?
【发布时间】:2011-08-02 15:10:40
【问题描述】:

我正在尝试使用转储文件和 windbg 调试在 64 位机器上运行的 32 位 .net 进程。当我加载转储文件时,我收到警告WARNING: MSVCR100_CLR0400 overlaps clr

加载wow64exts并切换到32位模式后,我加载SOS并得到以下错误:

The version of SOS does not match the version of CLR you are debugging.  Please
load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 10.0.30319.1
SOS Version: 4.0.30319.235
CLRDLL: Loaded DLL C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll

lmv 告诉我 CLR.dll 的版本实际上是 4.0.30319.235,但 MSVCR100_CLR0400.dll 的版本是 10.0.30319.1。

lm查看加载的模块地址范围显示模块重叠:

726e0000 727b1000   MSVCR100_CLR0400   (deferred)             
727a0000 72e10000   clr        (deferred)

我的结论是 SOS 感到困惑并找到 MSVCR100_CLR0400 而不是 clr 的模块头。

知道如何解决这个问题,以便我可以使用 SOS 来调试这个转储吗?

【问题讨论】:

    标签: debugging .net-4.0 windbg


    【解决方案1】:

    【讨论】:

    • 更重要的是,我需要捕获 32 位转储,而不是 32 位进程的 64 位转储。这篇博文解释了如何。
    • !wow32exts.sw 可让您加载 32 位进程的 64 位转储,但并非所有 SOS 功能都有效(例如,!eestack -EE 可以,但 !clrstack 不行)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多