我试图写一个消息到输出窗口调试的目的。我搜索了一个类似Java的system.out.println("")的函数。我尝试了调试。写,控制台。Write和Trace.Write。它不会给出错误,但也不会打印任何东西。

“定义调试常量”和“定义跟踪常量”选项被选中。

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

配置:活动(调试)

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


当前回答

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

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

> Debug.Print <item>

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

其他回答

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

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

调试测试时,调试输出也应该出现在正常输出窗口中;然而,控制台。Writeline输出没有(但可以在测试输出窗口中找到)。

调用

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

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

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

对我来说,只有Trace名称空间而不是Debug名称空间有效:

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

我在Visual Studio 2010下的一个c#项目中工作。

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

首先需要安装Serilog的Trace接收器。一旦安装,你需要像这样设置记录器:

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

(您可以设置不同的最小级别,或者将其设置为配置值或任何正常的Serilog功能。您还可以将跟踪记录器设置为特定级别以覆盖配置,或者按照您希望的方式进行设置。)

然后你只是正常地记录消息,它们会显示在你的输出窗口中:

Logger.Information("Did stuff!");

这看起来没什么大不了的,所以让我来解释一些额外的好处。对我来说最大的一点是,我可以同时登录输出窗口和控制台:

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

This gave me great flexibility in terms of how I consumed output, without having to duplicate all my calls to Console.Write with Debug.Write. When writing the code, I could run my command line tool in Visual Studio without fear of losing my output when it exited. When I had deployed it and needed to debug something (and didn't have Visual Studio available), the console output was readily available for my consumption. The same messages can also be logged to a file (or any other kind of sink) when it's running as a scheduled task.

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

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

这将写入调试输出窗口:

using System.Diagnostics;

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