【问题标题】:Can I output Trace messages to a separate window in Visual C# 2008 Express?我可以在 Visual C# 2008 Express 中将跟踪消息输出到单独的窗口吗?
【发布时间】:2010-03-24 12:57:35
【问题描述】:

控制台、调试和跟踪消息似乎都显示在“输出”窗口中,这在大多数情况下都很好,但我希望单独显示我的跟踪消息(这样它们就不会与所有内容交错)别的)。有没有办法在不写入文件/日志的情况下做到这一点?

【问题讨论】:

    标签: visual-studio-2008 trace


    【解决方案1】:

    当然,默认情况下,跟踪使用DefaultTraceListener 写入输出窗口,这是TraceListener 类的实现。

    要写入单独的输出,您需要使用预先提供的替代方法之一 TraceListeners 或实现您自己的(至少处理 Write()WriteLine();然后注册您的侦听器在您的配置文件中。

    【讨论】:

    • 我过去确实做过这个——它非常有用。但是,在这种情况下,我实际上是在谈论 Visual Studio 的“输出”可停靠窗口。最好单独监控控制台、调试和跟踪消息,而不是将所有消息都转储到那个窗口(其中也包含程序集加载和第一次机会异常消息)。
    • 是的,因此您可以编写一个 Visual Studio 插件来为每个插件提供单独的窗口——以及自定义 TraceListeners 以将输出发送到您的插件。但是,默认情况下,DefaultTraceListener 专门写入Output 窗口——Visual Studio 将其添加到应用程序的侦听器集合中——因此没有点击的方式来实现你想要的
    • 您可以“关闭”程序集负载和第一次机会异常,以免在调试输出窗口中转储。只需右键单击该窗口并在弹出菜单的底部,您将看到关闭异常显示和模块加载和卸载消息的选项。
    • 我喜欢@CJohnson 的“右键单击”提醒。我关闭了其他所有内容,现在我只在其中获得了我的 Trace.Write/Line() 语句。
    【解决方案2】:

    在 VS 中只有一个选项可以在不同的窗口中获取输出:工具 + 选项、调试器、常规、“将所有输出窗口文本重定向到即时窗口”。然而,这不太可能做你想做的事。

    没有可用于将输出输出到 VS 窗口的好的选项。唯一的机制是允许调试器查看消息的 Windows OutputDebugString() API 函数。 DefaultTraceListener 已经在使用它。 Visual Studio 宿主进程支持将 Console.Write/Line() 输出重定向到输出窗口。我不清楚它的工作机制,除了托管过程是 CLR 的自定义托管版本。不是您想要解决的问题,假设甚至可以替换它。

    到目前为止,最实用的方法是使用自己的跟踪侦听器简单地创建自己的窗口来显示跟踪输出。使用包含多行文本框的 Windows 窗体窗体类很容易。这有多实用取决于您的主要 EXE 的性质。或者跟踪文件并使用足够智能的文件查看器来查看文件的更新。我用远。

    哦,还有 SysInternals 的DebugView utility。它窥探 OutputDebugString() 文本。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多