我的 Windows 应用程序已经投入生产一段时间了,并将其设置为在抛出异常时向我们发送错误报告。其中大多数都具有相当的描述性,可以帮助我快速找到问题(我使用 MS 应用程序异常块)。

在某些情况下,我收到的报告是我无法重现的问题,并且似乎只发生在少数客户端计算机上。

我无法物理访问这些客户端计算机,我可以使用哪些策略进行调试?在代码中构建一些跟踪会更好吗?或者还有其他选择吗?

谢谢。

编辑:我应该说得更清楚:我得到的错误报告确实有堆栈跟踪,但由于它是生产代码,因此它并不指示导致异常的确切行,而仅指示引发异常的方法。

有帮助吗?

解决方案

一种选择是生成尽可能靠近抛出异常的位置的(小型)转储文件。这 文章 讨论如何从托管代码中执行此操作。

然后,您可以将转储文件加载到 Visual Studio 或 WinDbg 中,并借助以下命令检查它: 求救

其他提示

你走在正确的轨道上。您需要创建一个在本地记录操作/异常的跟踪模块。

然后,您可以有一个按钮或菜单选项,用户可以单击该按钮或菜单选项,以便在问题发生时自动通过电子邮件向您发送此信息,或者他们可以选择获取该文件,以便他们可以通过任何方式将其传输给您。另一种方式。

您甚至可以内置诊断代码来对系统运行完整性检查并向您发送报告(也许它会运行所有单元测试以查看它们是否在该系统上运行)。

我总是用这个 模块 来自 Jeff 的未处理异常,向我发送了一封包含堆栈跟踪等的电子邮件。

智能检查来自 古洛克软件 对我来说已经派上用场很多次了。它非常容易放入 .NET 应用程序中,并在分析日志文件时为您提供极其强大的控制。它的日志级别允许您关闭某些功能(除非在某些情况下),这样您就不会损失性能。

他们甚至拥有服务器软件,当您无法完全访问计算机时,您的软件可以连接到该服务器软件来保存日志。例如,您可以在 www.yourdomain.com 上运行服务器。您的软件将有一个配置选项来打开调试。Smart Inspect 将配置为将日志数据发送到您的服务器(也可以选择发送到本地文件),以便无论软件在何处运行,您都可以获得实时日志记录。

Smart Inspect 非常易于配置,并且具有许多可以为您提供帮助的功能。我用它来动态调试高影响的多线程服务器应用程序,而无需关闭机器。它具有跟踪不同进程、线程和机器的所有钩子。

我会利用事件日志。看看这里:

http://support.microsoft.com/kb/307024

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top