我正在尝试将消息写入输出窗口以进行调试。我搜索了一个像Java的
system.out.println("")
这样的函数。我尝试了Debug.Write
、Console.Write
和Trace.Write
。它不会给出错误,但也不会打印任何内容。
“定义 DEBUG 常量”和“定义 TRACE 常量”选项被选中。
菜单 工具 → 选项 → 调试 → “将所有输出窗口文本重定向到立即窗口” 选项未选中。
配置:活动(调试)
注意:我使用向导创建了一个项目作为“Windows 窗体应用程序”(如果相关)。我不知道去哪里看。
添加
System.Diagnostics
命名空间,然后您可以使用Debug.WriteLine()
快速将消息打印到IDE的输出窗口。欲了解更多详情,请参阅这些:
这将写入调试输出窗口:
using System.Diagnostics;
Debug.WriteLine("Send to debug output.");
Debug.WriteLine
就是您要找的。
如果没有,请尝试这样做:
菜单 工具 → 选项 → 调试 → 取消选中发送输出到立即。
对我来说,只有 Trace 命名空间有效,而 Debug 命名空间不起作用:
System.Diagnostics.Trace.WriteLine("message");
我正在 Visual Studio 2010 下的 C# 项目中工作。
您可能正在寻找
MessageBox.Show("A message")
或
Debug.WriteLine("A message")
来电
System.Diagnostics.Debug.WriteLine("message");
使用 .NET Core(V 1.0 或 1.1)时失败。
我们应该从
Microsoft.Extensions.Logging
创建并使用记录器,但该日志仅出现在 dotnet.exe 弹出控制台窗口中,而不出现在 Visual Studio 的输出窗口中。
出于调试目的,除非您有调试侦听器,否则
System.Diagnostics.Debug.WriteLine()
命令不会编译到代码的发布版本中。当在调试模式下运行时,它会写入所有跟踪侦听器,其中包括 VS 输出窗口。
对于控制台应用程序。
Console.WriteLine()
可以工作,但输出仍会在二进制文件的发行版本中生成。
调试测试时,调试输出也应该出现在正常输出窗口中;而 console.writeline 输出则不然(但可以在测试输出窗口中找到。)
这需要第三方框架,即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 来执行此操作可以非常轻松地将消息转储到多个目的地,确保我始终可以轻松访问输出,无论我如何运行它。
它还需要非常少的设置和代码。
Debug.Print("text here")
或
Console.WriteLine("text here")
这不是原始问题的答案。但由于我在寻找交互式转储对象数据的方法时发现了这个问题,我认为其他人可能会从提及这个非常有用的替代方案中受益。
我最终使用了命令行窗口并输入了
Debug.Print
命令,如下所示。这以可以复制为文本的格式打印了一个内存对象,这就是我真正需要的。
> Debug.Print <item>
id: 1
idt: null
igad: 99
igbd: 99
gl_desc: "New #20"
te_num: "1-001-001-020"
以下内容在 Visual Studio 2015 中对我有用:
OutputDebugStringW(L"Write this to Output window in VS14.");
请注意,此方法仅在您调试代码时才有效 (debug mode
)