如果我有一个小型转储文件或异常结构,我如何获得 winqual 使用的“桶 id”? (Windows c++)

Posted

技术标签:

【中文标题】如果我有一个小型转储文件或异常结构,我如何获得 winqual 使用的“桶 id”? (Windows c++)【英文标题】:How do I get the "bucket id" that winqual uses if I have a minidump file or exception structure? (Windows c++) 【发布时间】:2011-06-05 13:46:30 【问题描述】:

关于 SO 有几个相关的问题 - 但还没有找到答案 -

我想生成一个“签名”/bucket id 来向我们的问题跟踪系统报告小型转储/崩溃。由于 MS 已经使用“bucket ids”做到了这一点,我想我可以重新使用他们的 bucket/signature 生成。

我能否从***过滤器或过滤器内的 _EXCEPTION_POINTERS 对象或 _MINIDUMP_EXCEPTION_INFORMATION 结构或小型转储本身获取该 ID?

这是一个 C++ 应用程序。

【问题讨论】:

【参考方案1】:

不确定您需要哪个存储桶 ID。数字 id 由服务器分配,您可以在发送报告后通过查看事件日志找到它。在应用程序事件日志中查找事件 ID 1001。

要以字符串格式查找存储桶 id,请使用 windbg 或 cdb 并使用 !analyze 命令。

请注意,出于实际分桶的目的,您可能需要查看 WATSON_STAGEONE_URL 而不是 BUCKET_ID。

【讨论】:

我不想将事件发送到 winqual 以获取存储桶 id - 我只想运行一个类似的算法,以便我可以将 dmp 文件发送到fogbugz。 +1 事件日志信息 - 我不知道。 如果您不想将事件发送给 Microsoft,则需要设置自己的数据库。从“!analize -v”中获取 Watson URL,提取路径(从 StageOne 之后的 / 到最终的 .htm)并在数据库中查找,如果路径存在,则数据库应该具有存储桶 ID。如果找不到路径,则增加存储桶计数,将其分配为存储桶 id,并将映射存储在数据库中。 我觉得应该是!analyze -v【参考方案2】:

有一篇论文首先讨论了微软人如何创建存储桶 ID(是的,当然,这篇论文来自微软)。您实际上并不需要对他们使用的完全相同的分桶算法进行逆向工程。这是行之有效的想法。

论文可以在http://www.sigops.org/sosp/sosp09/papers/glerum-sosp09.pdf找到 因为这是一篇 SIGOPS 论文,所以他们还做了一张幻灯片:http://www.sigops.org/sosp/sosp09/slides/glerum-slides-sosp09.pdf

【讨论】:

我读过那个页面 - 是的,但我想知道我是否可以从转储文件或其他 api 中获取他们创建的 id。我想重用他们的代码/工作 - 不要自己做。 AFAIK 没有公共 API。 winqual 上的存储桶 id 是他们论文中列出的因素的 CRC32 校验和。如果有的话,我也想知道:)

以上是关于如果我有一个小型转储文件或异常结构,我如何获得 winqual 使用的“桶 id”? (Windows c++)的主要内容,如果未能解决你的问题,请参考以下文章

如何读取小型转储?

为啥我没有获得第一次机会异常的转储文件

C++ 捕获程序异常奔溃minidump

查找 C# 应用程序的故障转储文件

Linux 上的核心转储文件:如何获取打开文件的信息?

如何获取已处理异常的故障转储?