2012-04-11 3 views
5

System.Diagnosticsを使用する場合、スタックトレースを印刷することはあまり難しくありません。スタックトレースまで各メソッドに渡されたパラメータのVALUESを出力することが可能かどうか、またなぜそうでないのかと疑問に思っています。事前にスタックトレース上のパラメータの値を出力します

public static class CallStackTracker 
{ 
    public static void Print() 
    { 
     var st = new StackTrace(); 
     for (int i = 0; i < st.FrameCount; i++) 
     { 
      var frame = st.GetFrame(i); 
      var mb = frame.GetMethod(); 
      var parameters = mb.GetParameters(); 
      foreach (var p in parameters) 
      { 
       // Stuff probably goes here, but is there another way? 
      } 
     } 
    } 
} 

ありがとう:

は、ここに私の予備的なコードです。

+0

'MethodInfo.GetParameters'は、引数値ではなく宣言されたパラメータを返します。 –

+0

@ThomasLevesque:Ok、この特定のアプライアンスは機能しない可能性があります。それは別のものがありますか? – user420667

+0

デバッガだけが必要な情報にショットを持ち、.pdbファイルから利用できます。しかし、そこから急速にダウンすると、プログラムは自分自身をデバッグすることができず、情報はデバッグビルドに対してのみ正確です。メソッド呼び出しを最適化することは、非常に重要なジッタオプティマイザターゲットです。あなたはこの仕事をすることはできません。 –

答えて

2

少なくとも、System.Diagnosticsで提供されるクラスではできません。 StackFrameクラスは、引数の値を、私はそれがでそれを行うことは可能だと思う

MethodBase.GetParametersが宣言されたパラメータ、例えば自分の名前や種類が、実際の引数のない値に関する情報を提供します)にアクセスする方法を提供していません。 CLRデバッグAPIですが、おそらくC#からではありません

+0

CLRデバッグAPIリファレンスの+1。なぜこれが簡単に利用できないのかわかりません。 – user420667