代码之家  ›  专栏  ›  技术社区  ›  wageoghe

OutputDebugString的输出可以在VisualStudio的输出窗口中查看吗?

  •  19
  • wageoghe  · 技术社区  · 14 年前

    我正在使用C和VisualStudio2010。

    OutputDebugString 要编写调试信息,它应该显示在输出窗口中吗?

    我可以看到 OutputDebugString输出 DebugView ,但我想我会在visualstudio的输出窗口中看到它。我已经看过了 工具 选项 ? 调试 ? 总则 选项 ? 调试 输出窗口 所有常规输出设置都设置为“开”。最后,我使用了Output窗口中的下拉列表来指定应该显示调试消息。

    如果我改变菜单工具*? ? 调试 总则 OutputDebugString输出

    这是我的整个测试程序:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    
    namespace OutputDebugString
    {
      class Program
      {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern void OutputDebugString(string message);
    
        static void Main(string[] args)
        {
          Console.WriteLine("Main - Enter - Console.WriteLine");
          Debug.WriteLine("Main - Enter - Debug.WriteLine");
          OutputDebugString("Main - Enter - OutputDebugString");
          OutputDebugString("Main - Exit - OutputDebugString");
          Debug.WriteLine("Main - Exit - Debug.WriteLine");
          Console.WriteLine("Main - Exit - Console.WriteLine");
        }
      }
    }
    

    Debug.WriteLine 输出确实显示在输出窗口中,但是 OutputDebugString输出 输出不正确。

    如果我从控制台窗口运行

    为什么 OutputDebugString输出

    OutputDebugString输出 ,而是使用System.Diagnostics或NLog或类似的工具。我只是想知道,如果我配置了一个日志平台 OutputDebugString输出 ,则输出将在调试器中可见。

    我回到了我原来的程序(不是上面的简单测试),它使用 TraceSources TraceListeners 通过配置 app.config System.Diagnostics.DefaultTraceListener OutputDebugString输出 OutputDebugString输出 (例如在我的简单示例中)不要转到debug窗口。另外,如果我使用不同的 TraceListener OutputDebugString输出 (我从Codeplex的Ukadc.Diagnostics得到了一个),这个输出不会进入debug窗口。

    OutputDebugStringTraceListener

    Here here

    3 回复  |  直到 7 年前
        1
  •  37
  •   Hans Passant    7 年前

    项目>属性>在“调试”选项卡上,选中“启用非托管代码调试”复选框。在以后的VS版本中重命名为“启用本机代码调试”。启用非托管代码调试引擎后,OutputDebugString()输出现在被正确截获并定向到输出窗口。

        2
  •  9
  •   Tiago Freitas Leal    13 年前

    调试时(调试=>开始调试(F5),设置 效果不错。

    不调试时(调试=>在不调试的情况下启动(CTRL+F5)您不能使用SysInternals库中的DebugView。 Download DebugView for Windows v4.76

        3
  •  3
  •   Michael Burr    14 年前

    • 转到“工具”/“选项”/“调试”/“常规”。取消选中“将所有输出窗口文本重定向到即时窗口”

        4
  •  1
  •   Tom Huntington    4 年前

    我有一个项目>属性>调试选项卡>勾选“启用非托管代码调试”,但 OutputDebugString()

    我还有一个解决方案>通用属性>项目相关性>勾选了我的C#项目下的DLL,但生成依赖项不起作用。