2016-05-16 9 views
1

実行時にオブジェクト参照下で操作を追跡できるかどうか(コピー、アクセスなど)が不思議です。例えば 、私は次のコードをデバッグする場合:実行時のオブジェクト参照のトラッキング

private static void Main(string[] args) 
{ 
    // Creating new object and reference. 
    var myList = new List<int>(); 
    // a) Copying a reference to method. 
    UpdateList(myList); 
}    

private static void UpdateList(IList<int> list) 
{ 
    // b) Copying the reference. 
    var localList = list; 

    // c) Accessing the object through copied reference. 
    localList.Add(1); 
    // d) Copying a reference to method. 
    int count = GetListElementsCount(localList); 
} 

private static int GetListElementsCount(IList<int> list) 
{ 
    // Another reference access. 
    // Breakpoint here. 
    return list.Count; 
} 

を、私はそれ(、B、C、D)に行われたlist引数の起源や変化に目を通すことができ、GetListElementsCountにブレークポイントを置きますか? RoslynコンパイラはこれにいくつかのC#APIを提供していますか?

ありがとうございます。

+0

のhttpキー=メソッド呼び出しを作成するための

。 io /#Microsoft.CodeAnalysis/Compilation/DataFlowAnalysis.cs – SLaks

答えて

0

Visual Studio EnterpriseにHistorical Debuggingという機能があります。いくつかのlimitations(変数をAutosLocalウィンドウにのみ収集します)では、実際のコード再実行なしで変数履歴を見ることができます。

0

あなたの特定のニーズに非常に依存します。

DataFlowAnalysisSLaksコメント(必要に応じて)として確認できます。

もちろん、単純な単純なオプションを使用して、それぞれの操作の後に\の前にログを記録することもできます。

これら二つのオプションが十分ではない場合、あなたはすべての創造\ GETをラップすることにより、計測器でそれを行う試すことができます\設定など

計装はStaticProxy.Fodyまたは動的(城、LinFu、Sprint.Netなどのような静的することができ)。

その他の計測器はInstantプロジェクトです。これはNRefactoryを使用しますが、Roslynを使用するように簡単に変換できます。

実行時の動作に関する情報が得られたら、必要に応じて使用できます。

例では、一部のデータ構造にすべてのオブジェクトの変更を保存してGetListElementsCountメソッドを中断した後で、データ構造を調べて特定の操作を求めることができます。

データ構造は非常に簡単です( )。ここで、keyは操作名で、値は操作の実行後の新しい値です。 //source.roslyn: - :キー= "創造"、値=コールlist.Add(1)のためにリスト

:追加、値= 1つの

関連する問題