写入Visual Studio的输出窗口

问题描述 投票:0回答:12

我正在尝试将消息写入输出窗口以进行调试。我搜索了一个像Java的

system.out.println("")
这样的函数。我尝试了
Debug.Write
Console.Write
Trace.Write
。它不会给出错误,但也不会打印任何内容。

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

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

配置:活动(调试)

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

c# visual-studio-2010 visual-studio debugging
12个回答
911
投票

添加

System.Diagnostics
命名空间,然后您可以使用
Debug.WriteLine()
快速将消息打印到IDE的输出窗口。欲了解更多详情,请参阅这些:


188
投票

这将写入调试输出窗口:

using System.Diagnostics;

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

82
投票
Debug.WriteLine

就是您要找的。

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

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


31
投票

对我来说,只有 Trace 命名空间有效,而 Debug 命名空间不起作用:

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

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


16
投票

您可能正在寻找

MessageBox.Show("A message")

Debug.WriteLine("A message")

13
投票

来电

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

使用 .NET Core(V 1.0 或 1.1)时失败。

我们应该从

Microsoft.Extensions.Logging
创建并使用记录器,但该日志仅出现在 dotnet.exe 弹出控制台窗口中,而不出现在 Visual Studio 的输出窗口中。


8
投票

出于调试目的,除非您有调试侦听器,否则

System.Diagnostics.Debug.WriteLine()
命令不会编译到代码的发布版本中。当在调试模式下运行时,它会写入所有跟踪侦听器,其中包括 VS 输出窗口。

对于控制台应用程序。

Console.WriteLine()
可以工作,但输出仍会在二进制文件的发行版本中生成。

调试测试时,调试输出也应该出现在正常输出窗口中;而 console.writeline 输出则不然(但可以在测试输出窗口中找到。)


5
投票

这需要第三方框架,即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 来执行此操作可以非常轻松地将消息转储到多个目的地,确保我始终可以轻松访问输出,无论我如何运行它。

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


3
投票
Debug.Print("text here")

Console.WriteLine("text here")

2
投票

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

我最终使用了命令行窗口并输入了

Debug.Print
命令,如下所示。这以可以复制为文本的格式打印了一个内存对象,这就是我真正需要的。

> Debug.Print <item>

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

0
投票

以下内容在 Visual Studio 2015 中对我有用:

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

在此处阅读 OutputDebugStringW 的文档。

请注意,此方法仅在您调试代码时才有效 (debug mode

)


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

© www.soinside.com 2019 - 2024. All rights reserved.