我正在尝试将一条消息写入输出窗口以进行调试 . 我搜索了像Java的 system.out.println("")
这样的函数 . 我试过了 Debug.Write
, Console.Write
和 Trace.Write
. 它不会出错,但也不会打印任何内容 .
选中“定义DEBUG常量”和“定义TRACE常量”选项 .
菜单工具→选项→调试→"Redirect all Output Window text to the Immediate Window"选项未选中 .
配置:活动(调试)
注意:如果相关,我创建了一个项目,向导为“Windows窗体应用程序” . 我不知道在哪里看 .
11 回答
对我来说,只有 Trace 命名空间而不是Debug工作:
我在Visual Studio 2010下的C#项目中工作 .
你可能正在寻找
要么
电话
使用.NET Core(V 1.0或1.1)时失败 .
我们应该创建并使用
Microsoft.Extensions.Logging
中的 Logger ,但该日志只出现在dotnet.exe弹出控制台窗口中,而不是出现在Visual Studio的“输出”窗口中 .以下是
Visual Studio 2015
为我工作的:阅读OutputDebugStringW here的文档 .
请注意,此方法仅在您调试代码时有效(
debug mode
)这不是原始问题的答案 . 但是,当我在寻找交互式转储对象数据的方法时发现了这个问题,我认为其他人可能会从提到这个非常有用的替代方案中受益 .
我最终使用了命令窗口并输入了
Debug.Print
命令,如下所示 . 这打印了一个可以作为文本复制的格式的内存对象,这是我真正需要的 .添加
System.Diagnostics
命名空间,然后可以使用Debug.WriteLine()
快速将消息打印到IDE的输出窗口 . 有关详细信息,请参阅以下内容:How to trace and debug in Visual C#
A Treatise on Using Debug and Trace classes, including Exception Handling
这将写入调试输出窗口:
使用:
是你在找什么 .
如果没有,请尝试这样做:
菜单工具→选项→调试→取消选中将输出发送到立即 .
这需要第三方框架,即Serilog,但我仍然发现将输出输出到我可以看到的某个地方是一种非常流畅的体验 .
你首先需要安装Serilog的Trace sink . 安装完成后,您需要像这样设置 Logger :
(您可以设置不同的最低级别或将其设置为配置值或任何正常的Serilog功能 . 您还可以将
Trace
Logger 设置为特定级别以覆盖配置,或者您想要执行此操作 . )然后,您只需正常记录消息,它们就会显示在“输出”窗口中:
这似乎不是什么大问题,所以让我解释一些额外的优点 . 对我来说最大的一点就是我可以 simultaneously log to both the Output window and the console :
这使我在如何消耗输出方面具有很大的灵活性,而无需使用
Debug.Write
复制我对Console.Write
的所有调用 . 在编写代码时,我可以在Visual Studio中运行我的命令行工具,而不必担心退出时会丢失输出 . 当我部署它并需要调试某些东西时(并且没有作为计划任务运行) .最重要的是,使用Serilog这样做可以很容易地将消息转储到多个目的地,确保无论我如何运行它,我总能随时访问输出 .
它还需要非常少的设置和代码 .
打印到Visual Studio的输出窗口: