【问题标题】:How do I attach a trace listener to a running process?如何将跟踪侦听器附加到正在运行的进程?
【发布时间】:2010-11-20 09:42:57
【问题描述】:

我不确定这是否可能以我设想的方式实现,所以我希望有人能帮我解决这个问题。

我想将 TraceListener 注入到正在运行的进程中 - 有点。我实际上并不关心如何附加到进程,但最终目标是监听正在运行的进程的跟踪输出并将其转储到控制台窗口。

我可以附加到过程中,我可以编写一个 TraceListener 好吧...我要解决的问题是中间的一点。有人知道这是否可以做到吗?如果是这样,你能不能给我一个正确的方向,因为我在这里只见树木不见森林。

也许我试图以错误的方式解决这个问题?

【问题讨论】:

标签: c# .net debugging remote-debugging


【解决方案1】:

我认为这不切实际。在运行时创建监听器很容易,但这是应用程序必须做的事情,它涉及向列表中添加一些内容。

您可能希望确保默认侦听器未被删除并使用OutputDebug tool 进行侦听。

【讨论】:

  • 有趣 - 只是附加到默认侦听器?这将为我节省大量时间。我在想我必须自己写一些东西 - 但如果有人已经为我完成了工作,那么重新发明轮子是没有意义的。
  • 是的,默认侦听器使用 OutputDebugString API (WIN32)。这就是 Visual Studio 调试器中显示的内容。
【解决方案2】:

当我想查看调试输出时,我使用log4net 和DebugView 的组合。我可以让 log4net 监控一个配置文件,以允许我在运行时更改 log4net 日志记录级别,或者我可以在 DebugView 中使用过滤器。

【讨论】:

  • 如果我使用 log4net,我可以很容易地使用 tracelistener。目的是尝试附加到已经运行的应用程序而不将其关闭。
  • 我不太了解跟踪监听器,但 log4net 可以监控配置文件,让您在不关闭应用程序的情况下调整日志记录级别。 DebugView 仅监视写入 Windows 中的 OutputDebugString API 调用的所有进程。你不附加到特定的进程,但你可以过滤。
【解决方案3】:

Sysinternals 的DbgView 是否足以满足您的需求?它将向您显示所有正在运行的进程的跟踪消息,而无需您在启动进程之前配置跟踪侦听器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 2016-04-09
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多