.NET生产调试
我已经在生产中使用Windows应用程序一段时间了,并且将其设置为在引发异常时向我们发送错误报告。其中大多数都是描述性的,可以帮助我快速找到问题(我使用MS Application Exception Block)。
在某些情况下,我会收到一些报告,这些报告是我无法重现的,似乎只在少数客户端计算机上发生。
我没有物理访问这些客户端计算机的功能,可以用于调试的策略有哪些?在代码中构建一些跟踪会更好,还是有其他替代方法?
谢谢你。
编辑:我应该更清楚:我得到的错误报告确实具有堆栈跟踪,但是由于它是生产代码,因此它并不表示导致异常的确切行,而仅表示引发异常的方法。
解决方案
回答
我总是使用来自Jeff的此模块来处理未处理的异常,向我发送带有stacktrace等的电子邮件。
回答
我会利用事件日志。在这里看看:
http://support.microsoft.com/kb/307024
回答
我们走在正确的轨道上。我们需要创建一个跟踪模块,以在本地记录操作/异常。
然后,我们可以拥有一个按钮或者菜单选项,用户可以单击该按钮或者菜单,以在发生问题时自动向我们发送此信息,或者他们可以选择保留该文件,以便他们可以通过任何方式将该文件传输给我们另一种方式。
我们甚至可以内置诊断代码以在系统上运行完整性检查并向我们发送报告(也许它会运行所有单元测试以查看它们是否在该系统上运行)。
回答
一种选择是生成一个(迷你)转储文件,该文件尽可能接近引发异常的位置。本文讨论如何从托管代码执行此操作。
然后,我们可以将转储文件加载到Visual Studio或者WinDbg中,并借助SOS对其进行检查
回答
Gurock Software的Smart Inspect已多次派上用场。放入.NET应用程序非常容易,并且在分析日志文件时为我们提供了极其强大的控制。它具有的日志级别允许我们关闭某些功能(在某些情况下除外),以免造成性能损失。
他们甚至具有服务器软件,当我们没有对计算机的完全访问权限时,软件可以连接到该服务器软件以保存日志。例如,我们可能有一个运行在www.yourdomain.com上的服务器。软件将具有配置选项以打开调试。 Smart Inspect将配置为将日志数据发送到服务器(还可以选择发送到本地文件),以便无论在何处运行软件都可以进行实时日志记录。
Smart Inspect非常易于配置,并具有许多可用来帮助功能。我已经使用它来快速调试高影响力的多线程服务器应用程序,而无需关闭计算机。它具有所有钩子,可以跟踪不同的进程,线程和机器。