我有一个使用 MinGW 编译的 c++ 应用程序,我收到了客户的崩溃投诉。因此,除了大量记录可能崩溃的部分(在发布新版本之前)之外,我一直在寻找一个崩溃报告器,它可以帮助我在出现错误时找出堆栈跟踪和任何其他有用的调试信息。
是否存在与MinGW应用程序兼容的此类工具?(似乎then编译器和崩溃报告策略之间存在密切关系,因此问题。
有任何 Windows 工具可以帮助我吗?该应用程序主要在 Windows XP 机器上运行。
能够将信息写入文件对于我的目的来说已经足够了。然后我可以让我的客户将信息邮寄给我。
我一直在研究 google-breakpad和 SetUnhandledExceptionFilter ,但我仍然不知道它们是否会以任何方式有用。其他崩溃报告实用程序,例如 crashrpt , 是为 Visual C++ 设计的,所以我想用 MinGW 尝试它们没有多大意义。
编辑:关于该主题的一些有用链接
最佳答案
实际上,问题不在于如何让崩溃报告发挥作用。这对于 DbgHelp 库函数来说是相当微不足道的,其中最突出的是 MiniDumpWriteDump
。但是请记住,在旧系统上重新分发 DbgHelp 库并遵守您打算调用的函数的版本要求 - 较新版本的 Windows 至少带有该库的某个版本。
您使用非 MS 编译器的问题(例如 Embarcadero、以前的 Borland、产品或 Watcom 也存在该问题)是创建的调试符号对DbgHelp 库 - 用于在 Windows 上进行调试的标准工具。 PDB 格式在很大程度上没有文档记录(搜索术语:Sven Schreiber PDB),并且用于创建它们的库在与DbgHelp 库 - 后者只能用于读取/解析创建的调试符号。它们是 Visual Studio 产品的一部分,通常命名为 mspdbXY.dll(其中 XY 是十进制数字)。
因此,如果您想创建错误报告,我强烈建议您不要专注于“编译器问题”,而是专注于调试器问题。以下是您可以前往的一般方向:
- 使用了解您的特定调试格式的调试器(MinGW、IIRC 中的 GDB for DWARF)
- 使用能够理解多种格式的调试器(我想到了 IDA,它还有其他优势;))
- 为类似 WinDbg 的东西编写一个扩展,以便理解您的调试符号 (DWARF) 或更一般的
.map
文件(我知道此类扩展是几年前为 Borland 编写的.map
文件) - 学习汇编语言并使用可用的工具(WinDbg 或更一般的 DbgHelp 库)没有符号(除非您已经知道,否则学习曲线可能过于陡峭)
作为 4 的扩展,您还可以让 GCC 在编译期间创建 .S
(汇编)文件,以便在没有符号支持的情况下交叉引用源代码和故障转储。
鉴于我更喜欢 unixoid 平台上的 GDB,但 Windows 上的 WinDbg 和其他调试器,我不能说是否支持 Windows 上的 GDB 中的实际故障转储格式(使用 MiniDumpWriteDump
创建) ,所以我不确定在这种情况下 GDB 可能期望什么格式。
顺便说一句:如果您使用 Windows XP 或更高版本并且可以依赖该事实,请使用 AddVectoredExceptionHandler
而不是 SetUnhandledExceptionFilter
来准备编写故障转储。
关于c++ - MinGW 应用程序的崩溃报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225579/