打印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
根据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类所有的根命名空间
总而言之:我对这个解决方案很满意-谢谢!