据我了解,System.Console
默认会写入STDOUT,但System.Diagnostics.Trace
和System.Diagnostics.Debug
呢?什么是默认行为,它们是否可以以任何方式配置?
似乎不同的人使用不同的东西(在互联网上),但我假设我发现的大多数都是错的,因为每个人都应该有特定的语义,对吧?如果是这样,是否有任何框架(如ASP.NET或WPF)特别使用这些?
还有最后一个问题,选择使用其中一个的经验法则是什么?
答案 0 :(得分:22)
Debug
和Trace
都写到Listeners
集合的同一位置。默认情况下,它会路由到Visual Studio的“调试”窗口,但you can put code in your app.config
file会在您未调试时将其重定向到其他位置。
Debug
和Trace
之间的区别是Debug
中的所有方法仅在设置DEBUG
编译符号时写出(默认为debug,off为如果未设置符号,则不会在代码中调用方法。 Trace查找TRACE符号(默认为调试和释放)。除此之外,这两个类是相同的。实际上,如果您修改Debug.Listeners
以添加新的侦听器,它也会修改Trace.Listeners
,因为它们都指向内部静态属性TraceInternal.Listeners
至于选择使用哪一个,您是否希望在发布和调试模式下显示诊断信息?只使用Trace,Debug?使用Debug。您是否希望在没有附加调试器的情况下最终用户可以看到它?使用Console或添加控制台跟踪侦听器。