C#调试信息插入

本文关键字:插入 信息 调试 | 更新日期: 2023-09-27 17:50:33

可能重复:
如何在C#中的每个方法调用中添加Trace((?

在下面的例子中,我在每个方法中插入调试信息,这样我就可以看看哪个函数被调用:

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

在不同的名称空间和类下有数百个方法
将调试消息一个接一个地插入到每个方法中既麻烦又浪费时间
而不是像上面那样插入特定于方法的调试消息有更好的方法吗
也许是一个API函数,可以告诉我在哪个方法?

C#调试信息插入

如果您使用的是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
        }
    }
 }

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());
}