System.Diagnostics.Debug.Write输出出现在哪里?


147

以下C#程序(使用内置csc hello.cs)仅Hello via Console!在控制台和Hello via OutputDebugStringDebugView窗口中打印。但是,我看不到任何一个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进行任何开发,这只是纯命令行内容。


如在另一

Answers:


77

正如其他人指出的那样,必须注册侦听器才能读取这些流。还要注意,Debug.Write只有在DEBUG设置Trace.WriteTRACE构建标记的情况下该功能才起作用,而仅在设置了构建标志的情况下该功能才起作用。

在Visual Studio的项目属性中或通过向csc.exe提供以下参数,可以轻松地设置DEBUG和/或TRACE标志。

/define:DEBUG;TRACE


5
对我来说很有用(没想到)发现Debug和Trace对象使用相同的跟踪侦听器,因此Debug.Write和Trace.Write输出到相同的地方,这取决于在可能无法执行的条件下
hello_earth 2011年

1
您能否详细说明它们的条件?究竟是哪种情况,debug.Write与trace.write的工作方式不同?
Pacerier

2
这对我不起作用,我在vs项目属性中设置了调试和跟踪标志,并且正在使用Debug.WriteLine,该行执行了,但是输出窗口中没有任何显示,有人得到了其他建议吗?
f1wade 2014年

114

虽然调试System.Diagnostics.Debug.WriteLine将显示在输出窗口(Ctrl+ Alt+ O)中,但是您也可以TraceListenerDebug.Listeners集合中添加A ,以指定Debug.WriteLine在其他位置输出的调用。

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


4
我想确认(Ctrl + Alt + O)将在Visual Studio 2012中调试时调出输出窗口
Ishikawa

45

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

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

在调试模式下,它们还会显示在Visual Studio输出窗口中。


2
显然,DebugView将同时捕获.NET Debug.Write()和Win32 OutputDebugString():technet.microsoft.com/zh-cn/sysinternals/bb896647
dlchambers 2011年

@dlchambers:我认为那是不对的。该页面要求显示OutputDebugString()和(内核)DbgPrint().
Mike C

1
@dlchambers:我撤回评论;我发现,Debug.Write() 如果 DebugView 的Capture设置包含“ Global Win32” ,则DebugView可以捕获-这要求在Admin模式下运行它。
Mike C

10

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



5

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

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


2

我的情况的解决方案是:

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

0

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

同样,Console.WriteLine仅在“输出”窗口中以“发布”形式构建时显示消息。

如前所述,使用“ 视图” →“ 输出”打开“输出”窗口,如果要查看Console.WriteLine消息,请确保选择“ Build”,如果要查看Debug.WriteLine或Trace.WriteLine消息,请确保选择“ Debug”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.