はSOS

2016-12-27 19 views
0

を使用するランタイムclr.dllを見つけることができませんでした私は、単純なコンソールアプリケーション(ターゲットフレームワーク4.5.2)があります。は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(); 
    } 
} 

を私はマネージヒープの状態を見てみたいです。私は、次の手順を実行します。SOS .load MicrosoftNet\Framework\v4.0.30319\sos.dll

  • 見るためにコマンドを実行をロードするために

    1. オープンwindbgのwindbgのの「オープン実行」コマンドを使用して、私のプログラムの
    2. オープンのexeファイル
    3. するコマンドを実行し、ヒープ!eeheap -gc
    4. の状態

    しかし、最後のコマンドの間、私は、次のメッセージが出ます:

    ランタイム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) 
    
  • 答えて

    4

    私はあなたがそれを正しい方法をやったりしていないことを確認していないが、私は次のコマンドでそれを行うために使用される:

    sxe ld clrjit; g 
    

    とその書き込み後:

    .loadby sos clr 
    

    sxe ld clrjitclrjitモジュールがロードされ、デバッガに通知し、gフラグは、次の2つのplural-を以下がclr.dll

    私は一度見発見場所からSOSデバッガをロードし続けて実行と.loadby sos clrするためのものです視力Bart de SmetによってC#の内部のコースと私はC#とCLRの洞察を理解するためにそれらは素晴らしいが見つかりました:

    C# Language Internals - Part 1

    C# Language Internals - Part 2

    +0

    '.loadby'コマンドには' clr'モジュールが必要です。これは通常、 'clrjit'よりも早くロードされるので、' sxe ld clr'で十分でしょう。 –

    関連する問題