在 C# 中捕获调试输出

Posted

技术标签:

【中文标题】在 C# 中捕获调试输出【英文标题】:Capture debug output in C# 【发布时间】:2011-02-18 00:57:14 【问题描述】:

是否可以(创建调试侦听器)?

我想拥有像DebugView 这样的功能,但我想将调试输出记录到 SQL Server。或者更好的方法是将 DebugView 记录到文件中,然后将文件提供给 SQL Server?

我已经实现了TraceListener 并将其添加到Debug.Listeners 集合中,但它似乎只从我的应用程序中捕获调试。我想要做的是从所有应用程序中捕获调试。有没有办法做到这一点?

【问题讨论】:

很难从其他应用程序中获取信息。例如,除非我告诉你,否则你怎么知道我的应用程序如何输出调试信息。然而,几乎在所有情况下,只部署了“已发布”代码,因此没有“调试”信息。因此,捕获 DebugView 提供的信息(通过 Windows Debug)与您的合理预期差不多。 @AMissico - 我知道其他应用程序会输出调试信息,因为它们是这样编译的。我已经说过,我想做和 DebugView 一样的事情,但是将调试信息存储到数据库中。 【参考方案1】:

除非您真的有特殊需要滚动自己的记录器,否则我会使用现有的记录框架,例如 log4net。它有一个 ADO.NET 附加程序,您可以将其配置为将调试或跟踪输出直接记录到 SQL Server。

【讨论】:

我需要捕获其他应用程序的调试输出,而不仅仅是我的,所以这不是关于“在哪里记录东西”,而是“如何从其他应用程序记录东西”【参考方案2】:

DbMon.NET - http://www.codeproject.com/KB/trace/DbMonNET.aspx 上的一个简单的 .NET OutputDebugString 捕获器 似乎可以满足您的需求。

【讨论】:

以上是关于在 C# 中捕获调试输出的主要内容,如果未能解决你的问题,请参考以下文章

从 .NET 应用程序 (C#) 捕获控制台输出

未捕获 MySQL 异常 (C#)

C#:捕获混合托管/非托管进程的所有错误/异常

拦截 C# 中的所有异常,即使它们已经被捕获 [重复]

SharpPcap - 从标准输出捕获

DebugView 不捕获 KdPrint 输出