8

我正在重写我的意外错误处理过程,我想问社区:

当您编写的软件崩溃时,您会自动和手动捕获哪些信息?

现在,我捕获了一些项目,其中一些是:

自动的:

  1. 崩溃的应用名称
  2. 崩溃的应用版本
  3. 堆栈跟踪
  4. 操作系统版本
  5. 应用程序使用的 RAM
  6. 处理器数量
  7. 屏幕截图:(仅适用于非公开应用程序)
  8. 用户名和联系信息(来自 Active Directory)

手动的:

  1. 用户所处的环境(即:什么公司、技术支持电话号码、RA 号码等...)
  2. 用户期望什么时候发生?(典型反应:“不要崩溃”)
  3. 重现步骤。

您还捕获了哪些其他信息来帮助您发现应用程序问题的真正原因,特别是考虑到大多数用户在被要求告诉您发生了什么时只是简单地敲击键盘。

作为记录,我使用的是 C#、WPF 和 .NET 第 4 版,但我不一定想将自己限制在这些范围内。

相关:做什么:软件崩溃时收集信息

相关:最先进的错误和异常处理策略应该包括什么?

4

6 回答 6

1

现在来自偏执狂阵营:(

考虑软件的目标行业。收集有关用户的任何信息(甚至是活动目录名称)或网络可能会使您的应用程序被黑,并可能承担责任。即,如果您的错误数据库受到威胁,并且该信息被用于闯入银行或政府实验室网络,该怎么办。会注意到包含他们 IP 的错误报告吗?可以起诉吗?也许...

例如,如果您需要收集特定于网络的数据来诊断网络问题,请考虑让您的应用在将数据发送回给您之前用占位符替换任何系统名称或 IP。(emailSrvr1、bankAcctNumSrv 变为 srvr1 和 srvr2)跟踪问题更麻烦,但可能值得。这仍然会捕获可能给您带来麻烦的信息,但可能会有所帮助。

几年来,我一直在与高端企业和政府合作,这为我的观点增添了色彩,但可能值得考虑您正在收集什么以及如何存储它。

于 2010-05-16T12:06:24.077 回答
0

LA Transtar 还保留一个关键日志,该日志仅在失败时保存。该日志包含程序在运行时的输入和跟踪。日志在每个新事务开始时重置。

于 2010-05-13T20:34:37.797 回答
0

(这在某种程度上是 Windows / .NET 特定的,但这是您在问题中指定的内容,我认为在这种情况下这是非常有用的信息。)

除非您的应用程序是严格的单线程的,否则您需要一个转储文件(它至少会为您提供所有线程的堆栈),而不仅仅是抛出异常的线程的堆栈跟踪。

生成一个不太大且有足够信息为您提供有用的托管堆栈跟踪的转储有点棘手,但有一个非常有用的实用程序,称为clrdump,它将为您处理一些更详细的细节。

Clrdump 主要是 Microsoft 的 DbgHelp.dll 的包装器。您可以直接使用 DbgHelp - 请参阅此问题- 但随后您将获得一个“完整的小型转储”,它将与您的应用程序的虚拟地址空间一样大,可能非常大。Clrdump 很好地创建了一个小转储,其中仅包含堆栈跟踪以及足够的信息让 SOS 能够读取它们。

于 2010-05-14T18:07:52.240 回答
0

您没有提到进程日志记录(如 Linux 中的 syslog、Windows 的事件查看器?)。因为我也有系统管理员背景,所以我真的很欣赏带有日志功能的程序。如果可以选择详细级别,那就更好了。

对环境有更多的了解对您有好处,如果您的用户必须与其他工具进行某种类型的集成工作,对他们也有好处。

如果您的用户更具技术性,您可以要求他们将日志记录详细程度设置为最大并再次重现错误。

于 2010-05-15T14:06:39.413 回答
0

基本上,没有黄金法则要求您在每个应用程序中都遵循并实施它。根据您的业务应用程序和场景,当发生错误时,最适合包含不同的内容用于信息收集。

你提到的那些是好的,但这里有更多值得记录的内容:

  • 关键和复杂操作的输入参数
  • 程序的上下文 - 一些具有繁重算法的对象 - 最具风险的类
  • 您的程序所处的状态

示例:您的程序流程就像一个状态自动机,您有 5 个状态并且您已达到状态 3。

  • 如果您有一个服务器-客户端应用程序,请从提供方和消费方收集两个日志

  • 内存转储通常不是一个好建议 - 仅当您需要了解您无法控制的框架或 JVM(例如)中的问题时才这样做。例如 OutOfMemoryError

于 2010-05-15T17:04:41.310 回答
0

我在您的列表中没有看到最重要的信息(当我们谈论 dotnet/java 代码级别时)。
异常类型、消息和跟踪。
您可以使用简单的代码来捕获任何异常,并“写入日志”/“直接发送到电子邮件”。

于 2010-05-15T22:37:56.007 回答