MinGW 应用程序的崩溃报告

2024-07-04

我有一个用 MinGW 编译的 C++ 应用程序,我一直收到客户的崩溃投诉。因此,除了大量记录可能崩溃的部分(在发布新版本之前)之外,我一直在寻找一个崩溃报告器,它可以帮助我在出现错误时找到堆栈跟踪和任何其他有用的调试信息。

是否存在与 MinGW 应用程序兼容的此类工具?(似乎编译器和崩溃报告策略之间有密切的关系,因此是问题所在)。

有任何 Windows 工具可以帮助我吗?该应用程序主要在 Windows XP 计算机上运行。

能够将信息写入文件足以满足我的目的。然后我可以要求我的客户将信息邮寄给我。

我一直在调查谷歌断点器 http://code.google.com/p/google-breakpad/ and 设置未处理异常过滤器 http://msdn.microsoft.com/en-us/library/ms680634%28VS.85%29.aspx,但我仍然不知道它们是否会有任何用处。其他崩溃报告实用程序,例如crashrpt http://code.google.com/p/crashrpt/,是为 Visual C++ 设计的,所以我想用 MinGW 尝试它们没有多大意义。

编辑:关于该主题的一些有用的链接

  • 解决随机崩溃问题 https://stackoverflow.com/questions/3437809/solving-random-crashes
  • DrMinGW(即时调试器) http://code.google.com/p/jrfonseca/wiki/DrMingw
  • 我用来获取堆栈跟踪的一些代码 http://www.gamedev.net/topic/457984-walking-the-stack-in-c-with-mingw32/
  • Some people with the same problem:
    • mingw 下的核心转储 http://mingw-users.1079350.n2.nabble.com/Core-dumping-under-mingw-td2943483.html
    • 在 Mingw32 上创建并读取 gdb 核心转储 http://www.mail-archive.com/gdb@gnu.org/msg00073.html
    • 使用 MinGW + GDB 进行事后调试 http://old.nabble.com/postmortem-debugging-with-MinGW-%2B-GDB-td28163415.html

实际上,问题不在于如何让崩溃报告发挥作用。这对于 DbgHelp 库函数来说是相当微不足道的,最突出的是MiniDumpWriteDump。但是,请记住,要在旧系统上重新分发 DbgHelp 库,并遵守要调用的函数的版本要求 - 较新版本的 Windows 至少附带了该库的某些版本。

您使用非 MS 编译器的问题(该问题也存在于 Embarcadero,以前的 Borland,产品,例如,或 Watcom)是调试符号创建的 DbgHelp 库没有任何意义 - 这是theWindows 上调试的标准工具。 PDB 格式基本上没有文档记录(有关一些线索,请搜索术语:斯文·施赖伯 PDB)以及用于的库create它们与 DbgHelp 库不同,不是“公共”的 - 后者只能用于读取/解析创建的调试符号。它们是 Visual Studio 产品的一部分,通常命名为 mspdbXY.dll(其中 XY 是十进制数字)。

因此,如果您想创建错误报告,我强烈建议您不要专注于“编译器问题”,而是专注于调试器问题。以下是您可以选择的一般方向:

  1. 使用了解您的特定调试格式的调试器(MinGW、IIRC 中的 DWARF 的 GDB)
  2. 使用能够理解多种格式的调试器(我想到了 IDA,它还有其他优点;))
  3. 编写一个类似于 WinDbg 的扩展,以便理解你的调试符号(DWARF)或更一般的意义.map文件(我知道这样的扩展是几年前为 Borland 编写的.map files)
  4. 学习汇编语言并使用可用的工具(WinDbg 或更普遍的是 DbgHelp 库)without符号(可能是一个太陡峭的学习曲线,除非你已经知道)

作为 4 的扩展,您还可以让 GCC 创建.S编译期间的(程序集)文件,以便在没有符号支持的情况下工作时交叉引用源代码和故障转储。

鉴于我更喜欢​​ unixoid 平台上的 GDB,但 Windows 上的 WinDbg 和其他调试器,我真的不能说是否支持实际的故障转储格式(使用MiniDumpWriteDump) 在 Windows 上的 GDB 中,所以我不确定在这种情况下 GDB 可能需要什么格式。

顺便说一句:如果您使用 Windows XP 或更高版本并且可以信赖这一事实,请使用AddVectoredExceptionHandler代替SetUnhandledExceptionFilter准备写入故障转储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MinGW 应用程序的崩溃报告 的相关文章

随机推荐

  • Kotlin:在构造函数中初始化类属性

    我创建了一个带有类属性的 Kotlin 类 我想在构造函数中对其进行初始化 public class TestClass private var context Context null Nullable attribute public
  • 如何使用大量脚本文件管理 AngularJS 工作流程

    我研究了 gruntjs 但我不确定它是否是解决我的工作流程问题的正确工具 我正在开发一个巨大的 Angular 项目 其中已经有 30 多个 js 文件 每次添加新的 js 文件时 我都必须转到索引文件并在其中添加引用 有没有办法用 gr
  • 如何通过鼠标点击使一个对象移动并与另一个对象交换位置

    到目前为止 我有一个脚本 可以在单击鼠标时将对象移动一小段距离 但是我想更改它 以便当我单击该对象时 它会与旁边的另一个对象交换位置 而不仅仅是它所在的小距离现在搬家了 我对如何做到这一点有点困惑 因为我对统一很陌生 using Unity
  • 使用 ETag 进行 Volley 缓存

    我正在使用 Volley 库 但无法正确设置缓存 服务器向我发送 json 对象 过期时间和 ETag 我想将此对象保存在缓存中 并在下一个对该对象的请求中使用向服务器发送的请求 在标头中包含 ETag 如果响应为 304 Not Modi
  • 使用 Sublime Text 和正则表达式匹配行上的第一个空格

    所以正则表达式对我来说一直很困难 我试图找到一个正则表达式来选择一行上的第一个空格 这让我感到沮丧 那么我可以使用 sublime text 将其替换为 如果你能给出一个快速的解释 这将有助于 本着 edi 回答的精神 但对正在发生的事情进
  • 在挑选多个补丁时如何跳过一个补丁?

    我已经开始使用如下命令进行挑选 git cherry pick A B C D 假设补丁 A 和 B 有一些合并冲突 但我最终将它们全部修复并且git cherry pick continue 当我最终到达 C 时 我意识到一定已经应用了相
  • scala.tools.nsc.Interpreter -- 如何执行解释器语句以便在全局范围内定义结果? (Scala 2.7.7final)

    我正在尝试在 Scala 中解释字符串来定义类和方法 我使用了来自的例子http scala programming language 1934581 n4 nabble com Compiling a Scala Snippet at r
  • 每个 Service Fabric 实例的配置

    我正在设计一个服务结构无状态服务 它需要每个实例的配置数据 我最初的想法是创建命名分区 并使用PartitionInfo获取命名键 使用共享只读字典来加载每个实例的设置 问题是 现在在内部 从其他服务 访问此实例需要分区键 由于使用此方法的
  • 使用 junit 进行 Drools 测试

    使用 junit 测试 drools 规则的最佳实践是什么 到目前为止 我们使用 junit 和 dbunit 来测试规则 我们有放入 hsqldb 的示例数据 我们有几个规则包 到项目结束时 很难做出良好的测试输入来测试某些规则而不触发其
  • 我可以从图像文件的名称中获取图像文件的 Uri 吗?

    有一些图像文件 我想获取这些图像文件的Uri 在我的代码中 我只知道图像文件的路径和文件名 如何从路径和文件名中获取 Uri 如果你有一个File 您始终可以将其转换为URI File file new File path File pat
  • 如何获取所有行值制表符?

    我有使用制表器的可编辑表格 一切正常 但问题是单击 保存按钮 时无法获取所有行值 我正在尝试的是 document ready function var tabledata id 1 name Oli Bob age 12 col red
  • 将营业时间添加到 Java DateTime

    对于问题跟踪系统 我需要计算请求的响应时间 响应时间计时器只能在工作时间内运行 我应该使用什么算法 库来完成此任务 当然 我知道 Joda Time 或 ObjectLab Kit 但找不到任何对我的任务有帮助的东西 我错过了什么吗 Exa
  • 如何在 jest React Native 上调用或模拟 useForm?

    我有一个可重用的组件 称为 DatePicker 如下所示 export interface IPDatePicker extends IProps control any label string placeholder string v
  • git diff:--cached 和 --staged 之间有什么区别

    要将分阶段与上次提交进行比较 git diff cached git diff staged 两个命令生成相同的结果 对吧 的文档git diff says staged是 的同义词 cached 所以是的
  • 为什么 Pandas 中的 Pandas .loc 速度取决于 DataFrame 初始化?如何使 MultiIndex .loc 尽可能快?

    我正在尝试提高代码性能 我使用 Pandas 0 19 2 和 Python 3 5 我刚刚意识到 根据数据帧初始化的不同 一次写入一大堆值的 loc 速度有很大不同 有人可以解释为什么 并告诉我什么是最好的初始化吗 它可以让我加快我的代码
  • 如何使用 wistream 从内存中读取数据,就像从文件中读取数据一样?

    In my previous https stackoverflow com questions 4346240 how can i read from memory just like from a file using iostream
  • 在事件监听器函数中传递参数[重复]

    这个问题在这里已经有答案了 我想将参数传递给事件侦听器内部调用的函数 下面的代码显示了我想要做的事情 但它不允许我按照常规方式进行操作 有什么解决方法吗 HTML 代码
  • 逻辑和物理 URL

    这个问题是我之前问题的延伸 此网络服务是否安静 https webmasters stackexchange com questions 49832 what qualifies as a rest web service尝试更好地理解 R
  • Google API Drive V3 检索已用驱动器存储空间

    我正在使用谷歌服务帐户来检索不同用户的数据使用情况 我正在使用谷歌的 python 客户端来验证和检索数据 Code service build drive v3 credentials auth result service about
  • MinGW 应用程序的崩溃报告

    我有一个用 MinGW 编译的 C 应用程序 我一直收到客户的崩溃投诉 因此 除了大量记录可能崩溃的部分 在发布新版本之前 之外 我一直在寻找一个崩溃报告器 它可以帮助我在出现错误时找到堆栈跟踪和任何其他有用的调试信息 是否存在与 MinG