在实时调试加载了多个CLR版本的进程时,SOS命令失败

时间:2011-03-03 07:27:04

标签: windbg sos

我有一个ASP.net 2.0应用程序,我正在尝试使用Windbg和SOS.dll进行实时调试。 当我将调试器附加到进程时,我看到它加载了CLR的2.0和4.0版本。[mscorwks.dll和CLR.dll]。我通过 - .loadby sos mscorwks加载我的SOS。 在此之后,我的SOS命令都不起作用。我收到“无法请求线程存储”,“无法从系统域获取信息”等。

我了解到这是因为mscordacwks.dll与不同版本的CLR不匹配。但是我在google上使用cordll命令加载正确版本的mscordacwks的所有解决方案都无法解决我的问题。 特别是,我使用过.cordll -ve -lp但似乎没有任何区别。在再次执行“!threads”时,我得到了

“CLR DLL状态:已加载的DLL C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ mscordacwks.dll

无法请求线程存储“

我在stackoverflow中看到another entry围绕这个问题。但幸运的是,在提出解决方案之前问题就消失了,这也不是this entry的重复

任何有助于我使用加载到我的过程中的2个CLR版本的SOS exention的线索将不胜感激。

MSCORDACWKS版本的加载行为如下 -

**0:033>** .cordll -e 
CLR DLL status: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll 
**0:033>** .cordll -ve -u -lp C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll
 CLR DLL status: No load attempts 
**0:033>** .cordll -e
 CLR DLL status: No load attempts
 **0:033>** !threads 
CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll Failed to request ThreadStore 

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并与微软有过接触。使用最新版本的windbg,即在BUILD会议期间发布的onb,我能够加载.net 2版本的数据访问库。

Windbg版本包含在Windows 8 driver kit中。我能够使用以下命令加载mscorwks数据访问库:

.cordll -I mscorwks -lp <path to mscorwks dll>

答案 1 :(得分:1)

今天我也有同样的问题,我找到的所有命令都不起作用:(

然后我尝试使用较旧的调试器加载转储,它可以工作。我的版本是6.7.5.0,幸运的是我的机器上仍然可以使用一些旧版本:)

答案 2 :(得分:0)

答案 3 :(得分:0)

我在MS上打开了一个案例,我收到的回复是 -

“这是调试器的问题,产品团队现在正在研究它。”

我想我将不得不等待即将发布的windbg版本修复或探索其他工具!

谢谢!

答案 4 :(得分:0)

我今天仍然面临这个问题。

我发现一个解决方案适用于我(假设mscordacwks.dll&amp; sos.dll存储在文件夹&#34; C:\ sos&#34;)中:

.cordll -I mscorwks -lp "C:\sos"
.loadby sos mscorwks
!clrstack

此解决方案适用于以下版本的WinDbg:

  1. 10.0.15063(Windows套件10)
  2. 6.2.9200(Windows套件8.0)
  3. 已经在Win7 x86&amp; Win10 x64。