0

重複の可能性:
C#のすべてのメソッド呼び出しにTrace()を追加するにはどうすればよいですか?

次の例では、どの関数が呼び出されているかを確認できるように、各メソッド内にデバッグ情報を挿入しています。

namespace A
{
    class A1
    {
        void f1()
        {
            Console.WriteLine("inside A.A1.f1");  //1
        }
        void f2()
        {
            Console.WriteLine("inside A.A1.f2");  //2
        }
    }
 }

さまざまな名前空間とクラスの下に何百ものメソッドがあります。
各メソッドにデバッグメッセージを1つずつ挿入するのは面倒で、時間の無駄です。
上記のようにメソッド固有のデバッグメッセージを挿入する代わりに、それを行うためのより良い方法はありますか?
たぶん、Imがどのメソッドにあるかを知ることができるAPI関数ですか?

4

2 に答える 2

1

StackTraceおよびStackFrameクラスは、必要な情報を提供する場合があります(インラインメソッドはスタックフレームを取得しないことに注意してください)。

catch (Exception e)
{
  StackTrace st = new StackTrace();
  StackTrace st1 = new StackTrace(new StackFrame(true));
  Console.WriteLine(" Stack trace for Main: {0}",
    st1.ToString());
  Console.WriteLine(st.ToString());
}
于 2013-01-03T01:17:31.173 に答える
1

VS 2012を使用している場合は、で発信者情報を使用するように指示しますWriteLine

残念ながら、VS2010ではこれは不可能です。このようなものを呼び出すことはできますが、実際にはパフォーマンスが高くありません。

namespace A
{
    public static class DebugHelper
    {
        [Conditional("DEBUG")]
        public static void LogMethodName()
        {
            var method = new StackFrame(1).GetMethod();
            Console.WriteLine("inside {0}.{1}", method.DeclaringType, method.Name);
        }
    }
    class A1
    {
        void f1()
        {
            DebugHelper.LogMethodName();  //1
        }
        void f2()
        {
            DebugHelper.LogMethodName();  //2
        }
    }
 }
于 2013-01-03T01:21:03.847 に答える