6

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

我了解到这是由于不同版本的 CLR 的 mscordacwks.dll 不匹配。但是我在谷歌上找到的所有使用cordll命令加载正确版本的mscordacwks的解决方案都未能解决我的问题。特别是,我使用了 .cordll –ve –lp 但似乎没有任何区别。再次执行“!threads”命令后,我得到

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

请求线程存储失败”

我在stackoverflow中看到了另一个关于这个问题的条目。但对他来说幸运的是,在提出解决方案之前问题就消失了,而且这不是此条目的重复

任何帮助我使用 SOS 扩展和加载到我的进程中的 2 个版本的 CLR 的线索将不胜感激。

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 
4

5 回答 5

2

我有同样的问题,并与微软联系。使用在BUILD会议期间发布的最新版本的windbg,我能够加载.net 2版本的数据访问库。

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

.cordll -I mscorwks -lp <path to mscorwks dll>
于 2011-11-07T12:20:42.260 回答
1

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

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

于 2011-11-18T04:38:03.197 回答
1

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

我找到了一个适合我的解决方案(假设 mscordacwks.dll 和 sos.dll 存储在文件夹“C:\sos”中):

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

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

  1. 10.0.15063(Windows 工具包 10)
  2. 6.2.9200(Windows 工具包 8.0)

已在 Win7 x86 和 Win10 x64 上测试。

于 2017-12-19T06:01:20.667 回答
0

我有一个与 MS 一起打开的案例,我得到的回应是 -

“这是调试器的问题,产品团队现在正在解决这个问题。”

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

谢谢!

于 2011-03-18T11:48:37.360 回答