Debug 类

定义

提供一组有助于调试代码的方法和属性。

public ref class Debug abstract sealed
public ref class Debug sealed
public static class Debug
public sealed class Debug
type Debug = class
Public Class Debug
Public NotInheritable Class Debug
继承
Debug

示例

以下示例使用 Debug 指示程序执行的开始和结束。 该示例还使用 IndentUnindent 来区分跟踪输出。

// Specify /DDEBUG when compiling.

#using <System.dll>
using namespace System;
using namespace System::Diagnostics;

int main( void )
{
   #if defined(DEBUG)
   Debug::Listeners->Add( gcnew TextWriterTraceListener( Console::Out ) );
   Debug::AutoFlush = true;
   Debug::Indent();
   Debug::WriteLine( "Entering Main" );
   #endif
   Console::WriteLine( "Hello World." );
   #if defined(DEBUG)
   Debug::WriteLine( "Exiting Main" );
   Debug::Unindent();
   #endif
   return 0;
}
// Specify /d:DEBUG when compiling.

using System;
using System.Data;
using System.Diagnostics;

class Test
{
    static void Main()
    {
       Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
       Debug.AutoFlush = true;
       Debug.Indent();
       Debug.WriteLine("Entering Main");
       Console.WriteLine("Hello World.");
       Debug.WriteLine("Exiting Main");
       Debug.Unindent();
    }
}
' Specify /d:DEBUG=True when compiling.

Imports System.Data
Imports System.Diagnostics

Class Test

    Shared Sub Main()
    
        Debug.Listeners.Add(New TextWriterTraceListener(Console.Out))
        Debug.AutoFlush = True
        Debug.Indent()
        Debug.WriteLine("Entering Main")
        Console.WriteLine("Hello World.")
        Debug.WriteLine("Exiting Main")
        Debug.Unindent()
        
    End Sub
    
End Class

注解

若要使代码更可靠,而不会影响发货产品的性能和代码大小,请使用 类中的Debug方法来打印调试信息,并使用断言检查逻辑。

此类提供用于显示 Assert 对话框和发出始终失败的断言的方法。 此类提供以下变体中的写入方法:

BooleanSwitchTraceSwitch 类提供了动态控制跟踪输出的方法。 对于.NET Framework应用,无需重新编译应用程序即可修改这些开关的值。 有关使用配置文件在.NET Framework应用中设置开关的信息,请参阅Switch类和跟踪开关一文。

可以通过向集合中添加 TraceListener 实例或从 Listeners 集合中删除实例来自定义跟踪输出的目标。 集合 ListenersDebugTrace 类共享;向任一类添加跟踪侦听器会将侦听器添加到这两个类。 默认情况下, DefaultTraceListener 类发出跟踪输出。

注意

如果跟踪侦听器 Listeners 使用的资源不可用,则向集合添加跟踪侦听器可能会导致在跟踪时引发异常。 引发的条件和异常取决于跟踪侦听器,本文无法枚举。 在块中try/catch调用Debug方法以检测和处理来自跟踪侦听器的任何异常可能会很有用。

可以使用 方法或 IndentLevel 属性修改缩进Indent级别。 若要修改缩进间距,请使用 IndentSize 属性。 可以通过将 属性设置为 AutoFlushtrue来指定是否在每次写入后自动刷新输出缓冲区。

对于.NET Framework应用,可以通过编辑应用的配置文件为 Debug 设置 AutoFlushIndentSize 。 配置文件的格式应如以下示例所示。

<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="7" />
  </system.diagnostics>
</configuration>

特性 ConditionalAttribute 应用于 的方法 Debug。 支持 ConditionalAttribute 的编译器会忽略对这些方法的调用,除非 DEBUG 定义为条件编译符号。 请参阅编译器的文档以确定是否 ConditionalAttribute 受支持,以及用于定义条件编译符号的语法。

注意

在 Visual Studio C# 和 Visual Basic 项目中,默认情况下, DEBUG 条件编译符号是为调试版本定义的, TRACE 该符号是为调试版本和发布版本定义的。 有关 Visual C++ 中的条件调试的信息,请参阅 调试类 (C++/CLI)

若要在 C# 中定义 DEBUG 条件编译符号, /d:DEBUG 请在使用命令行编译代码时将 选项添加到编译器命令行,或添加到 #define DEBUG 文件的顶部。 在 Visual Basic 中,将 选项添加到 /d:DEBUG=True 编译器命令行或添加到 #Const DEBUG=True 文件中。

属性

AutoFlush

获取或设置一个值,通过该值指示每次写入后是否应在 Flush() 上调用 Listeners

IndentLevel

获取或设置缩进级别。

IndentSize

获取或设置缩进的空格数。

Listeners

获取监视调试输出的侦听器集合。

方法

Assert(Boolean)

检查条件 ;如果条件为 false,则显示一个消息框,其中显示调用堆栈。

Assert(Boolean, Debug+AssertInterpolatedStringHandler)

检查条件;如果条件为 false,则输出指定消息并显示指示调用堆栈的消息框。

Assert(Boolean, Debug+AssertInterpolatedStringHandler, Debug+AssertInterpolatedStringHandler)

检查条件;如果条件为 false,则输出指定消息并显示指示调用堆栈的消息框。

Assert(Boolean, String)

检查条件;如果条件为 false,则输出指定消息并显示指示调用堆栈的消息框。

Assert(Boolean, String, String)

检查条件 ;如果条件为 false,则输出两条指定消息,并显示一个消息框,其中显示调用堆栈。

Assert(Boolean, String, String, Object[])

检查条件;如果条件为 false,则输出两条指定消息(简单消息和格式化消息),并显示一个消息框,其中会显示调用堆栈。

Close()

刷新输出缓冲区,然后对所有 Listeners 调用 Close 方法。

Fail(String)

发出指定的错误消息。

Fail(String, String)

发出错误消息及详细的错误消息。

Flush()

刷新输出缓冲区,并使放入缓冲区中的数据写入 Listeners 集合。

Indent()

将当前的 IndentLevel 增加 1。

Print(String)

将后跟行结束符的消息写入 Listeners 集合中的跟踪侦听器。

Print(String, Object[])

将后跟行结束符的格式化字符串写入 Listeners 集合中的跟踪侦听器。

Unindent()

将当前的 IndentLevel 减少 1。

Write(Object)

将对象 ToString() 方法的值写入 Listeners 集合中的跟踪侦听器。

Write(Object, String)

将类别名称和对象的 ToString() 方法的值写入 Listeners 集合中的跟踪侦听器。

Write(String)

将消息写入 Listeners 集合中的跟踪侦听器。

Write(String, String)

将类别名称和消息写入 Listeners 集合中的跟踪侦听器。

WriteIf(Boolean, Debug+WriteIfInterpolatedStringHandler)

如果 conditiontrue,则向集合中的 Listeners 跟踪侦听器写入类别名称和消息。

WriteIf(Boolean, Debug+WriteIfInterpolatedStringHandler, String)

如果指定的条件为 true,则向集合中的Listeners跟踪侦听器写入类别名称和消息。

WriteIf(Boolean, Object)

如果条件为 true,则向 Listeners 集合中的跟踪侦听器写入对象的 ToString() 方法。

WriteIf(Boolean, Object, String)

如果条件为 true,则向 Listeners 集合中的跟踪侦听器写入类别名称和对象的 ToString() 方法值。

WriteIf(Boolean, String)

如果条件为 true,则将消息写入 Listeners 集合中的跟踪侦听器。

WriteIf(Boolean, String, String)

如果条件为 true,则将类别名称和消息写入 Listeners 集合中的跟踪侦听器。

WriteLine(Object)

将对象 ToString() 方法的值写入 Listeners 集合中的跟踪侦听器。

WriteLine(Object, String)

将类别名称和对象的 ToString() 方法的值写入 Listeners 集合中的跟踪侦听器。

WriteLine(String)

将后跟行结束符的消息写入 Listeners 集合中的跟踪侦听器。

WriteLine(String, Object[])

将后跟行结束符的格式化消息写入 Listeners 集合中的跟踪侦听器。

WriteLine(String, String)

将类别名称和消息写入 Listeners 集合中的跟踪侦听器。

WriteLineIf(Boolean, Debug+WriteIfInterpolatedStringHandler)

如果指定的条件为 true,则向集合中的Listeners跟踪侦听器写入一条消息。

WriteLineIf(Boolean, Debug+WriteIfInterpolatedStringHandler, String)

如果指定的条件为 true,则向集合中的Listeners跟踪侦听器写入类别名称和消息。

WriteLineIf(Boolean, Object)

如果条件为 true,则向 Listeners 集合中的跟踪侦听器写入对象的 ToString() 方法。

WriteLineIf(Boolean, Object, String)

如果条件为 true,则向 Listeners 集合中的跟踪侦听器写入类别名称和对象的 ToString() 方法值。

WriteLineIf(Boolean, String)

如果条件为 true,则将消息写入 Listeners 集合中的跟踪侦听器。

WriteLineIf(Boolean, String, String)

如果条件为 true,则将类别名称和消息写入 Listeners 集合中的跟踪侦听器。

适用于

线程安全性

此类型是线程安全的。

另请参阅