【问题标题】:How to read c# Debug.WriteLine as DebugView application does?如何像 DebugView 应用程序一样读取 c# Debug.WriteLine?
【发布时间】:2015-03-24 03:20:54
【问题描述】:

我有一个 c# windows 服务使用 Debug.WriteLine() 每秒输出当前日期和时间:

Debug.WriteLine(DateTime.Now);

然后我可以使用 SysInternals DebugView 程序 (https://technet.microsoft.com/en-us/sysinternals/bb896647) 读取此输出,但是我想基本上在我自己的 winforms 应用程序中重新创建我在此工具中看到的内容,因此您如何以编程方式准确获取 DebugView 的信息?

【问题讨论】:

  • 如果你控制了代码,为什么你需要挂钩到DebugView?为什么不简单地将日期粘贴到您的 winform 控件中?
  • 我将此作为一个概念来连接另一个服务,但需要证明它可以工作:-)
  • 所以你想要另一个进程的调试流?
  • 嗯,它是一个 Windows 服务,我只想阅读它的调试输出。
  • this 做你想做的事吗?

标签: c# winforms debugging output


【解决方案1】:

基本上你想截取来自某个进程的调试信息?

我认为this SO question 可能会对您有所帮助,但我不知道 MDbg 的当前状态是什么。

我有一个小程序可以做这样的事情,但是我使用命名管道的进程间通信来完成它,因此涉及到 2 路通信。

您还可以查看Listeners property,如果它有用的话,您可以将调试输出重定向到另一个流。

[编辑1]

This SO thread 告诉您下载 MDbg API,以便您可以在 .NET 应用程序中使用它。然后the other link I posted 可能会帮助您实际获得输出。

我认为这个问题可能很难解决,我使用 NamedPipes 解决了它,但是两个应用程序(服务和其他一些应用程序)必须相互了解。简单地阅读一个进程的 Debug.Write 可能会涉及到一些关于 MDbg 的研究。

【讨论】:

  • MDbg 似乎已经死了,所以听众可以吗?我尝试了 TextWriterTraceListener 但它似乎没有从服务中得到任何东西?
  • 这可能会变得很棘手。实际上,有一些方法可以读取调试输出。首先,将 Debug 输出重定向到 Console.Out 流,但要实际读取输出,您应该在自定义调试查看器中创建进程。另一种选择是使用异步或命名管道,就像我做的那样,但是你应该对你的服务做一些改变。
  • 另一种选择是查看 Microsoft.Samples.Debugging 命名空间,您可以在其中找到信息 herehere
  • 我认为 MDbgProcess 是在该命名空间中声明的。
  • 我相信我现在非常接近使用 MDbg,但我在示例中遇到了 LogMessageEventHandler 和 Console_CancelKeyPress 的一些错误,+1 表示努力,非常接近完美答案!!! :-)
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2017-02-06
相关资源
最近更新 更多