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