【问题标题】:Where does System.Diagnostics.Debug.Write output appear?System.Diagnostics.Debug.Write 输出出现在哪里?
【发布时间】:2020-05-02 03:22:19
【问题描述】:

以下 C# 程序(使用 csc hello.cs 构建)在控制台上仅打印 Hello via Console!,在 DebugView 窗口中打印 Hello via OutputDebugString。但是,我看不到任何一个 System.Diagnostics.* 调用。这是为什么呢?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

csc 是否需要一些特殊的命令行开关?

我没有使用 Visual Studio 进行任何开发,这是纯命令行的东西。

【问题讨论】:

标签: c# debugging


【解决方案1】:

调试时System.Diagnostics.Debug.WriteLine会显示在输出窗口中(Ctrl+Alt+O),你也可以添加@987654322 @ 到Debug.Listeners 集合以指定Debug.WriteLine 调用以在其他位置输出。

注意:如果您在菜单 工具 下选中了 Visual Studio 选项“将所有输出窗口文本重定向到即时窗口”,Debug.WriteLine 调用可能不会显示在输出窗口中选项调试常规。要显示“工具选项调试”,请选中“工具选项”旁边的框显示所有设置"。

【讨论】:

  • 我想确认 (Ctrl + Alt + O) 在 Visual Studio 2012 中调试时会弹出输出窗口
【解决方案2】:

正如其他人指出的那样,必须注册侦听器才能读取这些流。另请注意,Debug.Write 仅在设置了DEBUG 构建标志时才起作用,而Trace.Write 仅在设置了TRACE 构建标志时才起作用。

设置 DEBUG 和/或 TRACE 标志很容易在 Visual Studio 的项目属性中完成,或者通过向 csc.exe 提供以下参数来完成

/define:DEBUG;TRACE

【讨论】:

  • 发现 Debug 和 Trace 对象使用相同的跟踪侦听器对我很有用(没想到),因此 Debug.Write 和 Trace.Write 都输出到同一个地方( s),只是根据条件,它们可能不会被执行
  • 您能否详细说明它们是什么条件?究竟哪种情况下 debug.Write 与 trace.write 不一样?
  • 这对我不起作用,我在 vs 项目属性中设置了调试和跟踪标志,并且正在使用 Debug.WriteLine,该行执行,但输出窗口中没有出现任何内容,任何人都有其他建议?
  • 要扩展@hello_earth 评论,请参阅docs.microsoft.com/en-us/dotnet/api/…
【解决方案3】:

您需要添加TraceListener 才能看到它们出现在控制台上。

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

当处于调试模式时,它们也会出现在 Visual Studio 输出窗口中。

【讨论】:

  • 显然 DebugView 将捕获 .NET Debug.Write() 和 Win32 OutputDebugString():technet.microsoft.com/en-us/sysinternals/bb896647
  • @dlchambers:我不认为这是正确的。该页面声称显示OutputDebugString() 和(内核)DbgPrint().
  • @dlchambers:我撤回评论;我发现 DebugView 可以捕获 Debug.Write()if 它的捕获设置包括“Global Win32”——这需要在管理员模式下运行。
【解决方案4】:

在 Visual Studio 中进行调试时,显示“输出”窗口(视图->输出)。它会在那里显示。

【讨论】:

    【解决方案5】:

    诊断消息显示在输出窗口中。

    【讨论】:

      【解决方案6】:

      当我在代码中编写 debug.write("") 时,它会在“立即窗口”而不是“输出窗口”中输出。

      你可以试试。用于显示“立即”窗口(DebugWindow立即)。

      【讨论】:

        【解决方案7】:

        我的情况的解决方案是:

        1. 右键单击输出窗口;
        2. 检查“程序输出”

        【讨论】:

          【解决方案8】:

          对于 VB.NET,以下内容适用。您必须选择“调试”并确保“开始调试”。这可以通过按 F5 来实现。

          此外,Console.WriteLine 只会在您的输出窗口中构建为“发布”时显示消息。

          如前所述,使用 ViewOutput 打开“输出”窗口,如果要查看 Console.WriteLine 消息,请确保选择“构建”或“调试” " 如果您想查看 Debug.WriteLine 或 Trace.WriteLine 消息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-21
            • 2022-01-03
            • 2011-07-17
            • 1970-01-01
            • 2012-04-20
            • 2011-05-09
            相关资源
            最近更新 更多