打印调用Debug.Write()

时间:2015-10-06 09:11:30

标签: c# .net visual-studio

有没有办法在c#-project的debug-output中打印所有调用Debug.Write()的callsite(source-file和linenumber)?

背景

我是一个非常古老的项目的新手,所以我开始在调试模式下运行应用程序。在应用程序的某些点上,我感兴趣的是,调试输出正在编写一些无意义的行,如:

object
object
object

我认为如果我可以配置Debug-class或者给它一些回调以获取堆栈并在调试输出前面打印调用站点,这样会很好:

SomeClass.cs[45]: object
SomeClass.cs[45]: object
SomeClass.cs[45]: object

1 个答案:

答案 0 :(得分:0)

基于Jon Skeets suggestion我在root-namespace中实现了一个Degub类,如下所示:

public static class Debug
{
    public static void WriteLine(string str)
    {
        var sf = new StackFrame(1,true);

        System.Diagnostics.Debug.WriteLine("{0}({1}): {2}",
            Path.GetFileName(sf.GetFileName()),
            sf.GetFileLineNumber(),
            str
        );
    }
}

似乎编译器更喜欢使用using子句中定义的那个。但要小心:

  • 必须实现原始Debug类的每个 used 成员(例如ListenersWrite()WriteLine()的重载) - 否则构建失败
  • 我们的解决方案由几个具有不同命名空间的cs项目组成。所以我不得不复制这个Debug类所有root-namespaces

总而言之:我很满意这个解决方案 - 谢谢!