不调试模式时在Visual Studio输出窗口中显示消息?

时间:2009-02-18 20:04:06

标签: visual-studio

在Java中,您可以使用System.out.println(message)将消息打印到输出窗口。

Visual Studio中的等价物是什么?

我知道当我处于调试模式时,我可以使用它在输出窗口中查看消息:

Debug.WriteLine("Debug : User_Id = "+Session["User_Id"]);
System.Diagnostics.Trace.WriteLine("Debug : User_Id = "+Session["User_Id"]);

如果不在Visual Studio中进行调试,如何才能完成此操作?

6 个答案:

答案 0 :(得分:27)

结果不在输出窗口中,而是在测试结果详细信息中(底部的TestResult窗格,右键单击测试结果并转到TestResultDetails)。

这适用于Debug.WriteLine和Console.WriteLine。

答案 1 :(得分:20)

即使您没有处于调试模式,跟踪消息也可以出现在输出窗口中。 您只需确保定义了TRACE编译器常量。

答案 2 :(得分:13)

Trace.WriteLine方法是一种有条件编译的方法。这意味着只有在编译代码时定义TRACE常量时才会执行它。默认情况下,在Visual Studio中,TRACE仅在DEBUG模式下定义。

右键单击“项目”并选择“属性”。转到“编译”选项卡。选择Release模式并将TRACE添加到定义的预处理器常量。那应该为你解决问题。

答案 3 :(得分:7)

这整个线程让h#$ l感到困惑,直到我意识到 你必须运行调试器才能看到任何跟踪或调试输出 。我需要一个调试输出(在调试器之外),因为我的WebApp在调试时运行正常,但在调试器未运行时运行不正确(SqlDataSource在运行调试器时正确实例化)。

只是因为当您在发布模式下运行时可以看到调试输出 意味着如果您没有运行调试器,您将看到任何内容。仔细阅读Writing to output window of Visual Studio?可以让我DebugView作为替代方案。 非常有用!

希望这有助于其他人对此感到困惑。

答案 4 :(得分:1)

对我来说,这就是debug.writeline在立即窗口中显示的事实,而不是输出。我默认安装VS2013甚至不显示打开立即窗口的选项,因此您必须执行以下操作:

Select Tools -> Customize 
Commands Tab
View | Other Windows menu bar dropdown
Add Command...
The Immediate option is in the Debug section.

一旦你有了,那你可以去看看 - >其他Windows并选择立即窗口,嘿presto可以看到所有的调试输出。

对我来说不幸的是,它还显示了我在项目中没有意识到的大约50个错误......也许我只是再次关闭它: - )

答案 5 :(得分:1)

要在Visual Studio输出窗口中编写,我使用了IVsOutputWindowIVsOutputWindowPane。我在OutputWindow课程中包含了成员,如下所示:

public class OutputWindow : TextWriter
{
  #region Members

  private static readonly Guid mPaneGuid = new Guid("AB9F45E4-2001-4197-BAF5-4B165222AF29");
  private static IVsOutputWindow mOutputWindow = null;
  private static IVsOutputWindowPane mOutputPane = null;

  #endregion

  #region Constructor

  public OutputWindow(DTE2 aDte)
  {
    if( null == mOutputWindow )
    {
      IServiceProvider serviceProvider = 
      new ServiceProvider(aDte as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
      mOutputWindow = serviceProvider.GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;
    }

    if (null == mOutputPane)
    {
      Guid generalPaneGuid = mPaneGuid;
      mOutputWindow.GetPane(ref generalPaneGuid, out IVsOutputWindowPane pane);

      if ( null == pane)
      {
        mOutputWindow.CreatePane(ref generalPaneGuid, "Your output window name", 0, 1);
        mOutputWindow.GetPane(ref generalPaneGuid, out pane);
      }
      mOutputPane = pane;
    }
  }

  #endregion

  #region Properties

  public override Encoding Encoding => System.Text.Encoding.Default;

  #endregion

  #region Public Methods

  public override void Write(string aMessage) => mOutputPane.OutputString($"{aMessage}\n");

  public override void Write(char aCharacter) => mOutputPane.OutputString(aCharacter.ToString());

  public void Show(DTE2 aDte)
  {
    mOutputPane.Activate();
    aDte.ExecuteCommand("View.Output", string.Empty);
  }

  public void Clear() => mOutputPane.Clear();

  #endregion
}

如果您要在输出窗口中写入大文,通常不想冻结UI。为此,您可以使用Dispatcher。要使用此实现在输出窗口中编写内容,您现在可以简单地执行此操作:

Dispatcher mDispatcher = HwndSource.FromHwnd((IntPtr)mDte.MainWindow.HWnd).RootVisual.Dispatcher;

using (OutputWindow outputWindow = new OutputWindow(mDte))
{
  mDispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
  {
    outputWindow.Write("Write what you want here");
  }));
}