写入Visual Studio的输出窗口?

pre*_*per 576 c# debugging visual-studio-2010 visual-studio

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

选中"定义DEBUG常量"和"定义TRACE常量"选项.

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

配置:活动(调试)

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

Bha*_*hat 712

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

  • System.Diagnostics.Debug.WriteLine() (9认同)
  • 谢谢。我假设没有调试(ctrl-f5)就开始,就没有办法写输出了吗? (2认同)

vei*_*ght 149

这将写入调试输出窗口:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这个"输出"到立即窗口 (5认同)

Luq*_*man 79

使用:

System.Diagnostics.Debug.WriteLine("your message here");
Run Code Online (Sandbox Code Playgroud)


Mic*_*out 54

Debug.WriteLine
Run Code Online (Sandbox Code Playgroud)

是你在找什么.

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

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

  • 在VS 2015中,它被称为:"将所有输出窗口文本重定向到立即窗口",以防万一,有些人必须寻找5分钟才能找到合适的设置:) - 我上下滚动找到一个选项,以"发送......":) (6认同)
  • 我认为在更高版本中的复选框是"将所有输出窗口文本重定向到立即窗口" (3认同)
  • 直到我完成了Micah所说的之后,我才看到Debug.WriteLine(“ String”)。`工具|选项|调试取消选中将输出发送到即时` (2认同)

Zac*_*Zac 21

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

System.Diagnostics.Trace.WriteLine("message");
Run Code Online (Sandbox Code Playgroud)

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

  • 我正在使用VS 2013 Professional并尝试使用Visual Studio单元测试框架从单元测试中获取输出.看起来测试工具捕获并重定向Debug.WriteLine但不重定向Trace.WriteLine.除非你调试测试(不只是运行它们),否则你不会看到Trace输出. (2认同)

dan*_*u11 15

你可能正在寻找

MessageBox.Show()
Run Code Online (Sandbox Code Playgroud)

要么

Debug.Writeline()
Run Code Online (Sandbox Code Playgroud)

  • 当你想为调试目的写多个值时,`MessageBox.Show()`会非常烦人. (7认同)
  • 问题是"写入Visual Studio的输出窗口?" 不是消息框. (3认同)
  • 是的,您是对的,但问题是“正在写入Visual Studio的输出窗口吗?” 而不是使用以下代码的简单消息框:MessageBox.Show() (3认同)
  • @ProfK Visual Studio输出窗口是特定程序的非常特定的GUI元素,而MessageBox.Show不对其进行写入。 (3认同)

Pau*_*bas 8

电话

System.Diagnostics.Debug.WriteLine("message");
Run Code Online (Sandbox Code Playgroud)

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

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


Chr*_*wan 8

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

对于控制台应用程序。Console.WriteLine()可以工作,但输出仍然会在二进制文件的发行版本中生成。

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


jpm*_*c26 5

这需要第三方框架,即Serilog,但我仍然发现将输出输出到我可以看到的地方是一种非常流畅的体验。

您首先需要安装 Serilog 的Trace sink。安装后,您需要像这样设置记录器:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

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

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

Logger.Information("Did stuff!");
Run Code Online (Sandbox Code Playgroud)

这似乎没什么大不了的,所以让我解释一些额外的优势。对我来说最大的一个是我可以同时登录到输出窗口和控制台

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

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

最重要的是,使用 Serilog 执行此操作可以非常轻松地将消息转储到多个目的地,确保我始终可以轻松访问输出,无论我如何运行它。

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