c++ - 创建一个反射(reflect)崩溃原因的崩溃报告 Win32 C++ 字符串的好方法是什么?

标签 c++ windows fogbugz crash-dumps crash-reports

我们正在使用 Fogbugz 来跟踪问题,我正在为 XML API for Fogbugz 编写一个 C++ 包装器。 .

最佳实践似乎是使用“scout”字段,这样类似/相同的崩溃只会被计算在内,而不会再次报告。为此,我们需要一个针对特定崩溃原因的唯一字符串。

在 Win32 中 - 在获得 dmp 文件或其他崩溃处理程序后,什么是为崩溃创建唯一字符串的好方法? (我们将创建一个 dmp 文件并将其发送到 fogbugz 服务器)

在以前的帖子/文章/等中,Joel 提出了各种建议,但其中大部分都依赖于 C# 这样使用反射的语言,并且包含很多难以获取或无法获取的信息。

有没有其他人得到堆栈跟踪或其他东西来在 fogbugz 中制作侦察条目?

编辑 澄清一下——我们不希望每个事件都有一个唯一的 ID——可能有具有相同代码路径的崩溃。我们想捕获这一点。我在想我们会得到我们代码中的最后几个堆栈调用(不是来自 win32 DLL 的调用)——但不确定如何去做。

将每次崩溃都报告为独一无二的是不正确的。在同一案例下报告所有崩溃是不正确的。重复导致崩溃的场景的不同用户应该映射到同一事件。

编辑

我认为我们想要的是崩溃的一般“特征”——基于堆栈中的内容。相似的堆栈应具有相同的签名。例如 - 采用我们应用程序中的前 5 个方法,然后我们对 MS DLL 进行的第一次调用(如果有)。这对于签名来说可能就足够了,并且可能会关联“相同”的崩溃。

那么如何获取栈上的方法列表呢?您如何判断它们是来自您自己的应用程序还是来自另一个 DLL?

编辑 - 注意 我们想在异常处理程序中创建一个“bucket id”/签名,这样我们就可以创建小型转储并将其作为侦察描述发送给 fogbugz。或者,我们可以在应用程序下次启动时加载转储,然后使用我们生成的签名发送它。

最佳答案

在我的项目中,我使用崩溃的地址内存作为“唯一”ID。

关于c++ - 创建一个反射(reflect)崩溃原因的崩溃报告 Win32 C++ 字符串的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618765/

相关文章:

java - Android 版 OpenCV - Mat.get(row, col, double[])

c++ - 使用 OpenCV 进行图像分割

c++ - 为什么 "small"给出关于 "char"的错误?

windows - 使用 winrm 连接到远程服务器而不将服务器添加到 TrustedHosts

android - 如何解析 XML(Fogbugz XML API)?

c++ - 如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?

windows - gl_FragDepth 断色

.net - 什么是 .Net 的好的绘图库?

javascript - Fogbugz 风格的键盘快捷键有什么好的实现吗?

macos - 有适用于 Mac OS X 的好用的 Fogbugz 客户端吗?