7

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

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

我没有对这些客户端计算机的物理访问权限,我可以使用哪些策略进行调试?在代码中构建一些跟踪会更好,还是有其他替代方案?

谢谢你。

编辑:我应该更清楚:我得到的错误报告确实有堆栈跟踪,但由于它是生产代码,它并没有指出导致异常的确切行,只是它被抛出的方法。

4

5 回答 5

2

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

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

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

于 2008-09-09T20:27:17.133 回答
2

一种选择是生成一个(小型)转储文件,使其尽可能靠近引发异常的点。本文讨论如何从托管代码执行此操作。

然后,您可以将转储文件加载到 Visual Studio 或 WinDbg 并在SOS的帮助下对其进行检查

于 2008-09-09T20:28:27.617 回答
1

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

于 2008-09-09T20:22:13.433 回答
1

Gurock Software的Smart Inspect多次为我派上用场。它很容易放入 .NET 应用程序中,并在分析日志文件时为您提供极其强大的控制。它具有日志级别,允许您关闭某些功能,除非在某些情况下,这样您就不会失去性能。

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

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

于 2008-09-09T20:49:37.657 回答
0

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

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

于 2008-09-09T20:26:44.140 回答