繁体   English   中英

可以在 Visual Studio 的 output window 中查看 OutputDebugString 中的 output 吗?

[英]Can output from OutputDebugString be viewed in Visual Studio's output window?

我正在使用 C# 和 Visual Studio 2010。

当我使用OutputDebugString写入调试信息时,它是否应该显示在 output window 中?

我可以在DebugViewOutputDebugString中看到 output,但我想我会在 Visual Studio 的 Output window 中看到它。 我在菜单工具下查看过? 选项 调试 一般,并且 output 不会被重定向到即时 window。 我还查看了菜单工具*? 选项 调试 Output Window和所有常规 Output 设置设置为“开”。 最后,我使用了 Output window 中的下拉列表来指定应该出现调试消息。

如果我更改菜单工具*? 选项 调试 一般要将 output 重定向到即时 window, OutputDebugString消息不会出现在即时 window 中。

这是我的整个测试程序:

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");
    }
  }
}

If I run within the debugger, the Debug.WriteLine output does show up in the output window, but the OutputDebugString output does not.

如果我从控制台 window 运行,DebugView 中会同时显示Debug.WriteLineOutputDebugString

为什么OutputDebugString output 从未出现在 output window 中?

最终,我的意图不是用OutputDebugString编写大量调试 output ,而是使用 System.Diagnostics 或 NLog 或类似的东西。 我只是想知道,如果我将日志平台配置为写入OutputDebugString ,output 在调试器中是否可见。

我回到我的原始程序(不是上面的简单测试),它使用通过app.config文件配置的TraceSourcesTraceListeners 如果我将跟踪源配置为写入System.Diagnostics.DefaultTraceListener (记录为写入OutputDebugString ),那么跟踪源 output DOES go 到调试 Z05B8C35CBD962FBF2427C。 但是,直接使用OutputDebugString写入的行(例如在我的简单示例中)不会 go 到调试 window。 此外,如果我使用不同的TraceListener写入OutputDebugString (我从 Codeplex 的 Ukadc.Diagnostics 获得了一个),则 output 不会 go 到调试 Z05B8C74CBD9706FFBF2F4DE4C1。

关于 Ukadc.Diagnostics 跟踪侦听器的注释... Ukadc.Diagnostics 包含一些跟踪侦听器,允许自定义 output 格式(类似于 log4net、NLog 和 LAB 中可用的格式)。 因此,“仅”依赖于 Ukadc.Diagnostics 可以使用“标准”.NET 诊断日志记录,但我可以获得一些高级功能(如 output 格式),而无需依赖可能更大的平台。 在这种情况下,我可以使用 Ukadc.Diagnostics OutputDebugStringTraceListener将日志记录 output 以与写入文件时相同的格式(如果需要,或不同的格式)写入调试 window。

请注意,我已经看到了这些问题,但它们没有提供有效的解决方案:

这里这里

你让我在这个问题上问了一段时间。 没门! 道路。

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

调试时(调试 => 开始调试 F5),设置项目 + 属性,调试选项卡,选中“启用非托管代码调试”效果很好。

当不调试时(调试 => 开始而不调试 CTRL+F5),您必须使用 SysInternals 库中的 DebugView。 下载 DebugView for Windows v4.76

由于设置,它可能会显示在“立即窗口”中:

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

或者类似的东西。

我有项目 > 属性 > 调试选项卡 > 勾选了“启用非托管代码调试”,但即使断点起作用, OutputDebugString()也不起作用。

我也有解决方案 > 通用属性 > 项目依赖 > 在我的 C# 项目下勾选了我的 DLL,但构建依赖项不起作用。

解决这两个问题的方法是解决方案> 配置属性> 在我的 DLL 上勾选构建。

我曾经遇到过这个问题,并且该线程中建议的所有解决方案都失败了。 DebugView 能够看到调试消息,而 Visual Studio 2017 却不能,无论我如何尝试配置它。 启用本机代码调试? 查看。 没有重定向到“立即”? 查看。 项目没有从编译中排除? 查看。

最终,我在安装时使用“修复”选项通过 Visual Studio 安装程序解决了问题。 花了大约10分钟完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM