【问题标题】:Where does .NET's Debug.Write() output to?.NET 的 Debug.Write() 输出到哪里?
【发布时间】:2010-03-26 09:15:28
【问题描述】:

我在控制台或 Visual Studio 的输出面板中没有看到任何输出:

Debug.Write("WriteStatements() was reached")

输出到哪里去?

【问题讨论】:

  • 如果您在 Visual Studio 的 Output 窗口中看不到输出,请确保您在下拉菜单中选择了 Show output from Debug列表。

标签: .net


【解决方案1】:

Zhaph 的回答已经告诉您一种获取Debug.Write 输出的方法。

在后台,Debug.Write 的默认侦听器,即System.Diagnostics.DefaultTraceListener,调用 Windows API 函数 OutputDebugString

传递给该函数的任何消息都可以由调试器显示,例如您将在 Visual Studio 的 Output 窗口中看到输出。

查看Debug.Write 和/或Trace.Write 输出的另一种非常简单的方法是使用来自Sysinternals 的工具DebugView

DebugView 是一个应用程序,它可以让 您在本地监控调试输出 系统或网络上的任何计算机 您可以通过 TCP/IP 访问。它是 能够同时显示内核模式 和 Win32 调试输出,所以你不需要 需要一个调试器来捕获调试 输出您的应用程序或设备 驱动程序生成,您也不需要 修改您的应用程序或驱动程序以 使用非标准调试输出 API。

请注意,Debug.Write 语句不会包含在发布版本中,因此您只能在调试版本中看到输出。

【讨论】:

  • 我不得不说,在调试测试时这是一个了不起的工具。有时您需要在不运行调试器的情况下查看输出。谢谢德克!
【解决方案2】:

它会写入您需要打开的默认跟踪侦听器:

Debug.Write Method

如果您希望将其定向到控制台,您需要添加 ConsoleTraceListener 的实例:

在您的 .config 文件中确保您有以下条目:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="configConsoleListener" 
          type="System.Diagnostics.ConsoleTraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

您可能还需要确保在编译项目以启用输出时包含/d:TRACE 标志。

【讨论】:

  • @Ricky 有一个 DefaultTraceListener (msdn.microsoft.com/en-us/library/…),它显然会“将消息发送到 Win32 OutputDebugString 函数和 Debugger.Log 方法。有关 OutputDebugString 函数的信息,请参阅平台SDK 或 MSDN”,但您希望在需要 ConsoleTraceListener 的 Console/Output 窗口中使用它。
  • 在我发布答案之前没有看到您的评论,抱歉。
  • @divo - 不用担心,您对 DebugView 选择它提出了一个很好的观点,还有关于发布版本的说明;)
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多