首页 > 解决方案 > 想知道“!analyze -v”的windbg输出中的所有术语表示什么?

问题描述

关键值表示什么......以及哪个术语可以帮助我理解windbg如何存储崩溃意味着它如何将崩溃分类为?

标签: windbg

解决方案


帮我理解windbg桶

恕我直言,桶的概念是为 WER(Windows 错误报告)引入的。WER 被 Microsoft 使用,但也可供公司使用。WER 包含一项服务,您可以在其中登录 Microsoft 网站,然后了解您的应用程序崩溃情况。

当然,人们对简单的崩溃列表不感兴趣,但他们想知道发生了多少相同类型的崩溃。因此,微软和其他公司可以首先专注于修复那些影响大多数用户的错误。

桶,顾名思义,是一个容器,将类似的问题分组。存储桶 ID 分两个阶段生成:在客户端完成的标记过程和在服务器端完成的分类过程。

您从中获得的!analyze是分类,因此基本上您可以通过 WinDbg 访问 Microsoft 在服务器端用于提供 WER 服务的功能。

这些 WER 服务不再可用。他们已经被其他东西取代了,但我忘记了名字。

它如何粗略地将崩溃分类?

理想的分桶算法将为每个错误创建一个新的桶。因此,存储桶的数量仅受您可以在应用程序中编码的错误数量的限制。

该命令!analyze实施了 500 多种不同的启发式方法。这些组合可以创建超过 25.000.000 个不同的存储桶。

存储桶可能不同,因为

  • 模块
  • 函数名
  • 功能偏移
  • 损坏(堆损坏,图像损坏)
  • 检测到恶意软件
  • 已知过时的程序或库
  • 已知有缺陷的硬件
  • 异常代码
  • 异常子代码
  • ...

该分桶过程的结果是以下输出:

FAILURE_BUCKET_ID:  BREAKPOINT_80000003_ntdll.dll!LdrpDoDebuggerBreak

这可能在某种程度上等同于这个哈希:

FAILURE_ID_HASH:  {06f54d4d-201f-7f5c-0224-0b1f2e1e15a5}

我已经阅读了您之前在标签中提出的一些问题,我得到的印象是您想使用存储桶 ID 向人类显示一些有意义的信息。

实际上,WER 系统提供了这样的功能。它的工作原理是这样的:开发人员分析存储桶中的崩溃并找出要做什么(例如更新驱动程序、安装更新版本的应用程序等)。然后,他为该存储桶 ID 分配一个文本。任何再次遇到相同崩溃的客户都会被重定向到包含开发人员编写的文本的 Microsoft 网站。

但是,请注意,不涉及将崩溃转换为人类可读的东西的魔法。那是开发人员在努力工作,然后创建从存储桶 ID 到显示的某些文本的映射。

恕我直言,后者很容易实现。但是,任何新的错误都需要先进行分析。但是,谁知道呢,也许我们可以训练一个在这方面做得更好的人工智能。

有关存储桶等的更多信息,请阅读 Microsoft 论文Debugging in the (Very) Large:Ten Years of Implementation and Experience


推荐阅读