0
我有簡單的控制檯應用程序(目標框架4.5.2):無法找到運行clr.dll使用SOS
using System;
public class SosTest
{
public class Foo
{
public Foo()
{
Console.WriteLine("Creation of foo");
}
}
static void Main(string[] args)
{
var n1 = new Foo();
var n2 = new Foo();
Console.WriteLine("Allocated objects");
Console.WriteLine("Press any key to invoke GC");
Console.ReadKey();
n2 = n1;
n1 = null;
GC.Collect();
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
我想看看託管堆的狀態。我做以下步驟:
- 開放的WinDbg我的程序與WinDBG的「開放可執行文件」命令
- 打開exe文件
- 執行命令加載SOS
.load MicrosoftNet\Framework\v4.0.30319\sos.dll
- 執行命令來查看堆
!eeheap -gc
的狀態
但最後一個命令過程中出現了以下消息:
無法找到運行時DLL(clr.dll),0x80004005 擴展命令需要clr.dll纔能有所作爲。
爲什麼命令!eeheap -gc
失敗?
如果這將有助於它是lm
命令的結果:
0:000> lm
start end module name
00be0000 00be8000 ConsoleApplication1 (deferred)
734c0000 73519000 MSCOREE (deferred)
74c20000 74d00000 KERNEL32 (deferred)
753d0000 75571000 KERNELBASE (deferred)
77d80000 77f03000 ntdll (pdb symbols)
'.loadby'命令需要使用'clr'模塊。這通常比'clrjit'更早加載,所以'sxe ld clr'可能就足夠了。 –