我想知道Debug.WriteLine()
做了什么。我一直在许多不同的代码中看到它,但我没有得到它应该做的事情。
到目前为止我发现了什么:
“将有关调试的信息写入Listeners集合中的跟踪侦听器。”
它将在Visual Studio底部的输出窗口中显示消息/文本,您可以在其中记录一些操作,如“刚刚启动的构造函数”,然后更容易找到错误出现的位置。另一件事是你可以在调试输出中添加变量,如:
Debug.WriteLine("Debug message:Shop.Add.Product({0}), Product);
在这里查看:
https://msdn.microsoft.com/pl-pl/library/system.diagnostics.debug.writeline(v=vs.110).aspx
这可用于在调试版本中跟踪或记录消息。只有在程序编译为调试版本时才会执行它(定义了DEBUG
符号)。
您可以创建自己的TraceListener
s来捕获消息并根据需要记录它们。为了做到这一点,你必须从抽象的TraceListener
类继承:
public class MyListener : TraceListener
{
public override void Write(string message)
{
// log to file or db or whatever you need
}
public override void WriteLine(string message)
{
// log to file or db or whatever you need
}
}
然后你必须注册你的监听器的一个实例:
public static void Main()
{
MyListener listener = new MyListener();
Debug.Listeners.Add(listener);
// this ends up in MyListener.WriteLine, but only in a debug version
Debug.WriteLine("This is a debug log message");
Debug.Listeners.Remove(listener);
}
进一步阅读:MSDN
Visual Studio在调试时总是添加自己的TraceListener
,并将消息输出到输出窗口的调试窗格。
是的,它完全按照你在问题中所说的那样工作,这个方法的来源看起来像(简化):
public static void WriteLine(string message)
{
foreach (TraceListener listener in Listeners)
{
listener.WriteLine(message);
if (AutoFlush)
{
listener.Flush();
}
}
}
所以它只是为每个注册的TraceListener.WriteLine
调用trace listener方法,就像Trace.WriteLine
一样。您可以注册跟踪侦听器through config files or code。
Trace.WriteLine
和Debug.WriteLine
之间的唯一区别是它们是根据不同的条件编译的:
public class Debug
{
// this will be optimized away if "DEBUG" symbol is not defined
// in project build properties
[System.Diagnostics.Conditional("DEBUG")]
public static void WriteLine(string message) { ... }
}
public class Trace
{
// this will be optimized away if "TRACE" symbol is not defined
// in project build properties
[System.Diagnostics.Conditional("TRACE")]
public static void WriteLine(string message) { ... }
}