C#中的Debug.WriteLine() - 它做了什么?

问题描述 投票:1回答:3

我想知道Debug.WriteLine()做了什么。我一直在许多不同的代码中看到它,但我没有得到它应该做的事情。

到目前为止我发现了什么:

“将有关调试的信息写入Listeners集合中的跟踪侦听器。”

c# visual-studio
3个回答
2
投票

它将在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


2
投票

这可用于在调试版本中跟踪或记录消息。只有在程序编译为调试版本时才会执行它(定义了DEBUG符号)。

您可以创建自己的TraceListeners来捕获消息并根据需要记录它们。为了做到这一点,你必须从抽象的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,并将消息输出到输出窗口的调试窗格。


1
投票

是的,它完全按照你在问题中所说的那样工作,这个方法的来源看起来像(简化):

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.WriteLineDebug.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) { ... }
}
© www.soinside.com 2019 - 2024. All rights reserved.