写入Visual Studio的输出窗口?

时间:2012-02-27 14:40:12

标签: c# visual-studio-2010 visual-studio debugging

我正在尝试将一条消息写入输出窗口以进行调试。我搜索了像Java system.out.println("")这样的函数。我尝试了Debug.WriteConsole.WriteTrace.Write。它不会出错,但也不会打印任何内容。

“定义DEBUG常量”和“定义TRACE常量”选项。

菜单工具选项调试“将所有输出窗口文本重定向到立即窗口”选项未经检查。

配置:活动(调试)

注意:如果相关,我创建了一个项目,向导为“Windows窗体应用程序”。我不知道在哪里看。

14 个答案:

答案 0 :(得分:661)

添加System.Diagnostics命名空间,然后您可以使用Debug.WriteLine()快速将消息打印到IDE的输出窗口。有关详细信息,请参阅以下内容:

答案 1 :(得分:137)

这将写入调试输出窗口:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

答案 2 :(得分:74)

使用:

System.Diagnostics.Debug.WriteLine("your message here");

答案 3 :(得分:50)

    Debug.WriteLine

是您正在寻找的。

如果没有,请尝试这样做:

菜单工具选项调试→取消选中发送输出到立即

答案 4 :(得分:21)

对我来说,只有 Trace 命名空间而不是Debug工作:

System.Diagnostics.Trace.WriteLine("message");

我在Visual Studio 2010下的C#项目中工作。

答案 5 :(得分:16)

您可能正在寻找

MessageBox.Show()

Debug.Writeline()

答案 6 :(得分:9)

电话

System.Diagnostics.Debug.WriteLine("message");
使用.NET Core(V 1.0或1.1)时

失败。

我们应该创建并使用来自Microsoft.Extensions.Logging的记录器,但该日志只出现在dotnet.exe弹出控制台窗口中,而不是出现在Visual Studio的“输出”窗口中。

答案 7 :(得分:4)

这需要第三方框架,即Serilog,但我仍然认为将输出发送到我能看到的地方是非常顺利的体验。

首先需要安装Serilog的Trace sink。安装完成后,您需要设置如下记录器:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(您可以设置不同的最低级别或将其设置为配置值或任何正常的Serilog功能。您还可以将Trace记录器设置为特定级别以覆盖配置,或者您想要这样做。)

然后,您只需正常记录消息,它们就会显示在“输出”窗口中:

Logger.Information("Did stuff!");

这似乎不是什么大问题,所以让我解释一些额外的优点。对我来说最大的一点就是我可以同时登录“输出”窗口和控制台

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

这使我在消耗输出方面具有很大的灵活性,而无需使用Console.Write将所有调用复制到Debug.Write。在编写代码时,我可以在Visual Studio中运行我的命令行工具,而不必担心退出时会丢失输出。当我部署它并需要调试某些东西(并且没有Visual Studio可用)时,控制台输出随时可用于我的消费。当它作为计划任务运行时,也可以将相同的消息记录到文件(或任何其他类型的接收器)。

最重要的是,使用Serilog这样做可以很容易地将消息转储到多个目的地,确保无论我如何运行它都可以随时访问输出。

它还需要非常少的设置和代码。

答案 8 :(得分:2)

以下内容适用于Visual Studio 2015

OutputDebugStringW(L"Write this to Output window in VS14.");

阅读OutputDebugStringW here的文档。

enter image description here 请注意,此方法仅在您调试代码(debug mode

时有效

答案 9 :(得分:2)

这不是原始问题的答案。但是,当我在寻找交互式转储对象数据的方法时发现了这个问题,我认为其他人可能会从提到这个非常有用的替代方案中受益。

我最终使用了命令窗口并输入了Debug.Print命令,如下所示。这打印了一个可以作为文本复制的格式的内存对象,这是我真正需要的。

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"

答案 10 :(得分:2)

Debug.Print("text here")

Console.WriteLine("text here")

答案 11 :(得分:1)

打印到Visual Studio的输出窗口:

Debug.Writeline();

答案 12 :(得分:0)

出于调试目的,除非您有调试侦听器,否则System.Diagnostics.Debug.Writeline()命令不会被编译到代码的发行版本中。在调试模式下运行时,它将写入包括VS输出窗口在内的所有跟踪侦听器。

对于控制台应用程序。 Console.Writeline()可以使用,但是输出仍会在您的二进制发行版中生成。

在调试测试时,调试输出也应出现在常规输出窗口中;但是,console.writeline输出没有(但是可以在测试输出窗口中找到。)

答案 13 :(得分:0)

对于使用 NCrunch 的任何人,调试输出被重定向到 NCrunch 的“跟踪输出”窗口。