当您的软件在现场崩溃时,您会捕获哪些信息?

Rus*_*uss 8 error-handling production-environment

我正在努力重写我意想不到的错误处理过程,我想问社区:

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

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

自动:

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

手册:

  1. 用户的背景是什么(即:什么公司,技术支持电话号码,RA号码等...)
  2. 用户什么时候发生?(典型回应:"不要崩溃")
  3. 重现步骤.

您捕获的其他信息有助于您发现应用程序问题的真正原因,特别是考虑到大多数用户在被要求告诉您发生了什么时只是简单地粘贴键盘.

为了记录我正在使用C#,WPF和.NET版本4,但我不一定要限制自己.

相关:内容:软件崩溃时收集信息

相关:最新的错误和异常处理策略应包含哪些内容?

McK*_*eG1 0

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

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

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

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