打印Debug.Write()中所有调用的调用站点

本文关键字:调用 站点 Debug Write 打印 | 更新日期: 2023-09-27 18:16:16

是否有办法在c#项目的调试输出中打印所有对Debug.Write()的调用的callsite(源文件和linenumber) ?

背景:

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

object
object
object

我认为如果我可以配置调试类或给它某种回调,以获取stackframe并在调试输出前打印调用点,就像这样:

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

打印Debug.Write()中所有调用的调用站点

根据Jon Skeets的建议,我在根命名空间中实现了一个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子句中定义的那个。但注意:

  • 每个使用的成员的原始调试类必须实现(Listeners和超载的Write()WriteLine()为例)-否则构建失败。
  • 我们的解决方案由几个具有不同命名空间的cs项目组成。所以我不得不复制这个Debug类所有的根命名空间

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