为了调试的目的,我正在尝试将消息写入输出窗口。我搜索了一个函数,比如Java的EDCOX1,0。我试过Debug.Write、Console.Write和Trace.Write。它不会给出错误,但也不会打印任何内容。
选中"define debug constant"和"define trace constant"选项。
菜单工具→选项→调试→"将所有输出窗口文本重定向到即时窗口"选项未选中。
配置:活动(调试)
注意:如果相关的话,我创建了一个向导为"Windows窗体应用程序"的项目。我不知道该去哪儿看看。
- 尽量使用Debug.WriteLine()。
- 因为这是一篇老文章,我将添加此内容作为对那些偶然发现这个问题的人的评论。您也可以使用称为跟踪点的特殊断点,而不是实际更改代码。请参阅msdn文档
- 只是提醒您,debug.writeline()只有在debug中运行时才能工作。这意味着使用f5运行它,而不是使用ctrl-f5。这很容易错过。
- 确实如此,但一个方便的工具是debugview,它在调试器外部运行时显示所有输出到调试流。
- 如果您试图从在Visual Studio测试框架下运行的单元测试中写入输出,则规则稍有不同,有关详细信息,请参阅此答案。
- 只需添加注释@kirk.burleson;如果您在库中使用Debug.Write,并且在发布模式下构建库(这通常是nuget包的情况),那么即使您在调试模式下运行测试/应用程序,它也不会记录。我建议用Trace.Write作为替代方案。
添加System.Diagnostics名称空间,然后可以使用Debug.WriteLine()将消息快速打印到IDE的输出窗口。有关详细信息,请参阅以下内容:
- 如何在Visual C中跟踪和调试#
- 关于使用调试类和跟踪类(包括异常处理)的论述
- 谢谢您。我假设如果没有调试(ctrl-f5)就无法写入输出,对吗?
- 我猜你在找这个:stackoverflow.com/questions/562590/…
- 再次感谢,但这对我不起作用。即使定义了跟踪常量,跟踪也不会在没有调试模式的情况下打印。
- 刚刚在这里运行了一个小应用程序,对我来说很好。也许你的环境有点小问题?
- 这是我的测试代码;pastebin.com/b7p0byea很简单,但仍然没有什么。我将在另一个系统上尝试。
- system.diagnostics.debug.writeline()。
- 那么痕迹在哪里出现呢?
这将写入调试输出窗口:
1 2 3
| using System.Diagnostics;
Debug.WriteLine("Send to debug output."); |
- 对于我来说,这个"输出"到即时窗口
- 我在一组单元测试中试过。我调试了所选的测试,但在调试窗口中没有任何我尝试打印的内容。
- 但是,只有在关闭网页后,才会输出到调试窗口。我希望在执行代码时立即显示。等一下-我发现代码执行时输出窗口是隐藏的。如果我显示窗口,我的输出就在那里。
用途:
1
| System.Diagnostics.Debug.WriteLine("your message here"); |
就是你要找的。
如果没有,请尝试执行以下操作:
菜单工具→选项→调试→取消选中将输出发送到即时消息。
- 可能是debug.write()没有插入回车,所以消息被缓冲了?
- 不确定我错过了阅读问题
- 我没有看到debug.writeline("string"),直到我按照micah所说的做。Tools|Options|Debugging uncheck Send Output to Immediate
- 我认为在以后的版本中,复选框是"将所有输出窗口文本重定向到即时窗口"
- 在vs 2015中,它被称为:"将所有输出窗口文本重定向到即时窗口",以防万一,一些人必须寻找5分钟来找到合适的设置:)-我在上下滚动找到一个选项a,从"发送…"开始:
对于我来说,只有跟踪命名空间而不是调试命名空间起作用:
1
| System.Diagnostics.Trace.WriteLine("message"); |
我正在Visual Studio 2010下的C项目中工作。
- 我正在使用VS2013专业版,并尝试使用Visual Studio单元测试框架从单元测试中获取输出。似乎测试工具捕获并重定向debug.writeline,但没有trace.writeline。除非调试测试(而不仅仅是运行测试),否则也不会看到跟踪输出。
你可能在找
或
- 当您想为调试目的编写多个值时,MessageBox.Show()可能非常烦人。
- 问题是"写入Visual Studio的输出窗口?"不发送到消息框。
- @amirtwito消息框是一个输出窗口。
- 是的,你说得对,但问题是"写入Visual Studio的输出窗口?"而不是使用以下代码的简单消息框:message box.show()。
- @profk Visual Studio输出窗口是特定程序的一个非常特定的GUI元素,并且MessageBox.Show不会写入它。
呼叫
1
| System.Diagnostics.Debug.WriteLine("message"); |
使用.NET核心时失败(v 1.0或1.1)。
我们应该从Microsoft.Extensions.Logging创建和使用一个记录器,但该日志只显示在dotnet.exe弹出控制台窗口中,而不显示在Visual Studio的输出窗口中。
- 那么debug.writeline()、console.writeline()和trace.writeline()没有为.NET核心输出任何内容吗?有没有办法不用写日志类就可以使用某种简单的日志记录?在"工具>选项>调试"中搜索并选中"显示输出来源:"以获取可能的解决方案。
这需要一个第三方框架,即serilog,但我仍然发现它是一个非常顺利的经验,可以将输出发送到我能看到的某个地方。
首先需要安装serilog的跟踪接收器。安装后,您需要如下设置记录器:
1 2 3 4
| Logger = new LoggerConfiguration ()
.MinimumLevel.Verbose()
.WriteTo.Trace()
.CreateLogger(); |
(您可以设置不同的最低级别,或将其设置为配置值或任何正常的serilog功能。您也可以将Trace记录器设置为特定级别以覆盖配置,或者您希望这样做。)
然后,您只需正常记录消息,它们就会显示在输出窗口中:
1
| Logger.Information("Did stuff!"); |
这似乎不是什么大问题,所以让我解释一下其他的优点。对我来说最大的一个是我可以同时登录到输出窗口和控制台:
1 2 3 4 5
| Logger = new LoggerConfiguration ()
.MinimumLevel.Verbose()
.WriteTo.Trace()
.WriteTo.Console(standardErrorFromLevel : LogEventLevel .Error)
.CreateLogger(); |
这使我在如何消耗输出方面具有很大的灵活性,而不必使用Debug.Write复制我对Console.Write的所有调用。在编写代码时,我可以在Visual Studio中运行命令行工具,而不必担心退出时会丢失输出。当我部署了它并且需要调试某些东西(并且没有可用的Visual Studio)时,控制台输出很容易就可以供我使用。同样的消息也可以在作为计划任务运行时记录到文件(或任何其他类型的接收器)中。
最后一点是,使用serilog来实现这一点使得将消息转储到多个目的地变得非常容易,从而确保无论如何运行输出,我都可以随时访问输出。
它还需要非常小的设置和代码。
- serilog现在在github.com/serilog/serilog-sinks-debug也有一个"debug"接收器,功能类似,但格式稍微好一点:hth!
- 为什么不将.NET公开(可能是静态的)方法,并将您需要的一切(如console.write或debug.write等)放在那里,然后在任何地方使用它呢?
- @当saulius作为计划任务运行时,同样的消息也可以被记录到一个文件(或任何其他类型的接收器)中。最后一点是,使用serilog可以很容易地将消息转储到多个目的地,从而确保无论如何运行输出,我都可以随时访问输出。"
这不是原始问题的答案。但是,由于我在搜索交互转储对象数据的方法时发现了这个问题,我认为其他人可能会从提到这个非常有用的替代方法中获益。
我最终使用了命令窗口并输入了Debug.Print命令,如下所示。它以一种可以作为文本复制的格式打印了一个内存对象,这正是我真正需要的。
1 2 3 4 5 6 7 8
| > Debug.Print <item>
id: 1
idt: null
igad: 99
igbd: 99
gl_desc:"New #20"
te_num:"1-001-001-020" |
以下是我在Visual Studio 2015工作的:
1
| OutputDebugStringW(L"Write this to Output window in VS14."); |
在此处阅读OutputDebugStringW的文档。
注意,只有在调试代码(debug mode时,此方法才有效。
打印到Visual Studio的输出窗口: