这需要第三方框架,即 Serilog ,但我仍然发现它是一个 非常 将输出输出到某个地方的顺畅体验我可以看到它。
你首先需要安装Serilog的 跟踪下沉 。安装后,您需要像这样设置记录器:
Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Trace() .CreateLogger();
(您可以设置不同的最低级别或将其设置为配置值或任何正常的Serilog功能。您还可以设置 Trace 记录器到特定级别以覆盖配置,或者您想要这样做。)
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可用)时,控制台输出随时可用于我的消费。当它作为计划任务运行时,也可以将相同的消息记录到文件(或任何其他类型的接收器)。
Console.Write
Debug.Write
最重要的是,使用Serilog这样做可以很容易地将消息转储到多个目的地,确保无论我如何运行它,我总能随时访问输出。
它还需要非常少的设置和代码。
这不是原始问题的答案。但是,当我在寻找交互式转储对象数据的方法时发现了这个问题,我认为其他人可能会从提到这个非常有用的替代方案中受益。
我最终使用了命令窗口并进入了 Debug.Print 命令,如下所示。这打印了一个可以作为文本复制的格式的内存对象,这是我真正需要的。
Debug.Print
> Debug.Print <item> id: 1 idt: null igad: 99 igbd: 99 gl_desc: "New #20" te_num: "1-001-001-020"
这将写入调试输出窗口:
using System.Diagnostics; Debug.WriteLine("Send to debug output.");
使用:
System.Diagnostics.Debug.WriteLine("your message here");
以下为我工作 Visual Studio 2015 :
Visual Studio 2015
OutputDebugStringW(L"Write this to Output window in VS14.");
阅读OutputDebugStringW的文档 这里 。
请注意,此方法仅在您调试代码时有效( debug mode )
debug mode