如何在Visual Studio 2012+中过滤输出?

26

我在使用Visual Studio 2015时遇到了一个问题,就是无法很好地查看Debug.WriteLn输出中的特定内容。(在2012和2013版本中也是同样的情况。)

XCode和Eclipse都在Output窗口顶部包含一个过滤器框。我尝试找到类似的扩展来用于Visual Studio,但没有成功。是否有一种类似的功能可以过滤输出窗口中的内容呢?


如果需要从输出中删除一些杂乱信息,请参考Visual Studio - Filter exceptions from debug output - user829755
4个回答

56
我使用这种方法:

打开“调试-输出”窗口,只需右键单击该窗口即可。

输入图像描述

您可以根据需要进行勾选/取消勾选。


4
谢谢!这非常有帮助。 - Winks
1
我用VS已经很多年了,竟然不知道这个上下文菜单的存在!为什么他们不把这些选项放到工具栏上呢? - undefined

12

在 Visual Studio 2017 中(我认为其他版本也有),我发现一个事情:

工具 | 选项 | 调试 | 通用 > 将所有输出窗口文本重定向到 "立即窗口"

这样,您就可以只在立即窗口中查看程序的 Debug.WriteX 输出,而将所有其他无用信息留在输出窗口中,并且可以将输出窗口关闭。

如果有必要,我仍然可以查看输出窗口中的无用信息;它并没有被抑制。它只是不会出现在立即窗口中。

我将小的立即窗口停靠在底部,我认为这很好。

我认为这很好,因为当所有垃圾都在输出窗口中出现时,我真的没能关注到输出,就像服务条款协议一样(也就是说,几乎没有),所以宝宝和洗澡水一起被扔掉了。但现在我实际上看到需要注意的程序调试输出。

我认为微软应该将输出窗口下拉框扩展到包括 FetFrumos 在他的答案中指出的所有类别,以便开发人员可以将其设置为“程序输出”。我认为这将是一个不错的改进。


1
Visual Studio社区版17.3.0预览版1.1,发布于2022年6月。我无法让它正常工作。重定向已经存在,我使用了Debug.Writeline和using System.Diagnostics。我做错了什么吗? - gfmoore

8

Visual Studio中的各种服务都会向输出窗口写入内容,因此内置了基于来源的过滤器。您通常可以选择来源,例如“构建输出”、“测试发现”、“常规”、“调试”等。

Debug.Write调用被VS拦截并在输出窗口中显示文本,但没有内置过滤器。

我能想到3种解决方法:

  1. 使用DbgView来拦截Debug.Write消息,而不是让VS拦截它们。 DbgView具有非常强大的过滤和着色功能*
  2. 尝试此扩展,根据正则表达式对输出进行着色
  3. 编写自己的扩展程序(这并不难!)

(*)如果您选择此路线,请注意,Debug.Write只是一个跟踪,当您附加VS调试器时,它将将自己添加为跟踪列表。DbgView也是一样。但是,当您分离时,它不会删除侦听器,消息将丢失。


谢谢您的时间和回复!我尝试了使用管理员权限的 DbgView,但它没有打印与我的应用程序相关的任何内容。(我启动并停止了调试器,但它没有起作用)。着色扩展很有用,但对我来说还不够,因为它仍然填充输出窗口。很奇怪没有人需要这个功能。我将尝试看看是否可以快速编写一个扩展(虽然我还不知道如何):-/ - frankish
1
尝试在没有调试器(或完全没有使用VS)的情况下运行您的应用程序,然后启动dbgview。 - Bogdan Gavril MSFT
我保持VS打开但停止调试器,DbgView正常工作,我能够过滤它来进行测试。非常感谢。但是,我希望有一天VS包括该过滤功能,这样我就可以动态地使用VS的调试器。 - frankish
经过4年,这个功能仍然不存在,但现在我发现了一个扩展,可以实现我想要的功能,来自@GrantTheAnt的答案。 - frankish

7
多年来,我一直想要过滤Visual Studio输出内容。最终,我决定编写一个扩展程序来实现这一目标。如果您有兴趣,可以在 niahtextfilter.com 上了解更多。
以下是其功能示意图:

Niah Text Filter filtering some debug output


4
这正是我想要的。经过4年之后,微软竟然还没有将其包含进去,这太不可思议了。 - frankish
1
请注意,该扩展程序不是免费的。如果您想尝试一下,可以使用30天的试用版本。 - NearHuscarl
1
这个扩展有点笨重,但我认为它值得花钱购买。我曾经用它来调试一些输出窗口里充满垃圾信息的项目,其他开发人员并没有太在意使输出窗口更适合调试,而这个扩展真的救了我一命。 - Tomáš Hübelbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接