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函数,可以告诉我在哪个方法?
如果您使用的是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());
}