如何将跟踪侦听器附加到正在运行的进程?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

这是log4net doc for OutputDebugString appender 的链接。我从谷歌搜索“log4net OutputDebugString”到这里,但页面上还没有直接链接 【参考方案1】:

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

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

【讨论】:

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

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

【讨论】:

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

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

【讨论】:

以上是关于如何将跟踪侦听器附加到正在运行的进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何将侦听器附加到单选按钮

如何以编程方式获取正在侦听某个端口的进程的 pid?

将事件侦听器附加到与当前域不同的域

如何检查是不是有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制]

如何针对单个 ECS 服务附加两个目标组

如何为附加到元素的每个事件侦听器打印或迭代? [复制]