を得るパラメータ値からのスタックフレームです。います。

StackOverflow https://stackoverflow.com/questions/75076

  •  09-06-2019
  •  | 
  •  

質問

いを得ることのできるすべてのパラメータの値をスタックフレームです。います。このファミリー向かいに見ることができ値は、呼び出しスタックの場合は、Visual Studioのアンインストールします。私のアプローチとして、様利用 StackFrameのクラス その反省の上 ParameterInfo 配列に格納します。また反射特性が証明ッtrickier.

あのためのアプローチを実現。

コードのこれまでのようになります。

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Go(1);
    }
}

public class A
{
    internal void Go(int x)
    {
        B b = new B();
        b.Go(4);
    }
}

public class B
{
    internal void Go(int y)
    {
        Console.WriteLine(GetStackTrace());

    }
    public static string GetStackTrace()
    {
        StringBuilder sb = new StringBuilder();
        StackTrace st = new StackTrace(true);
        StackFrame[] frames = st.GetFrames();

        foreach (StackFrame frame in frames)
        {
            MethodBase method = frame.GetMethod();

            sb.AppendFormat("{0} - {1}",method.DeclaringType, method.Name);
            ParameterInfo[] paramaters = method.GetParameters();
            foreach (ParameterInfo paramater in paramaters)
            {
                sb.AppendFormat("{0}: {1}", paramater.Name, paramater.ToString());
            }
            sb.AppendLine();
        }
        return sb.ToString();
    }
}

の出力は以下のようなものです:

SfApp.B - GetStackTrace
SfApp.B - Go
y: Int32 y
SfApp.A - Go
x: Int32 x
SfApp.Program - Main
args: System.String[] args

んで見つけることができます。:

SfApp.B - GetStackTrace
SfApp.B - Go
y: 4
SfApp.A - Go
x: 1
SfApp.Program - Main

のためだけにビットコンテキストのっくする場合、こちらをご使用くださって投げる私の独自の例外をスローしました。私は見てのご提案を詳細に見た場合など、これは構文なのでしょうかでなければなりません。

役に立ちましたか?

解決

そうでできなることができてうれしいです。で、イベント等の案内をご提供するメタ情報の方法及びそのパラメータ。ない実際の値の時にcallstack.

あら導出クラスから ContextBoundObject -利用 IMessageSink 通知をオフすべてのメソッド呼び出しの値のパラメータ。これは通常の使用 .リモネ.

もう書きアンインストールします。こうして、IDEを取得す。マイクロソフト社の Mdbg の取得することができる、ソースコードです。または書き CLRプロファイラ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top