MinGW应用程序的崩溃报告

Jon*_*Lee 23 c++ windows mingw crash-reports

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

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

有没有可以帮助我的Windows工具?该应用程序主要在Windows XP计算机上运行.

能够将信息写入文件足以满足我的目的.然后我可以让我的客户给我发信息.

我一直在研究google-breakpadSetUnhandledExceptionFilter,但我仍然不知道它们是否会以任何方式有用.其他崩溃报告实用程序,例如crashrpt,是为Visual C++设计的,所以我想用MinGW尝试它们并没有多大意义.

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

0xC*_*22L 15

实际上问题不在于让崩溃报告发挥作用.这对于DbgHelp库函数来说相当微不足道,而且最重要的是它MiniDumpWriteDump.但是,请记住,在旧系统上重新分发DbgHelp库,并观察要调用的函数的版本要求 - 较新版本的Windows至少附带此库的某个版本.

使用非MS编译器的问题(Embarcadero,以前的Borland,产品,或Watcom也存在问题)是创建的调试符号对DbgHelp库没有意义 - 这是调试标准工具在Windows上.PDB格式在很大程度上没有记录(对于一些线索搜索术语:Sven Schreiber PDB),用于创建它们的库与DbgHelp库的意义不同,后者只能用于读取/解析创建的调试符号.它们是Visual Studio产品的一部分,通常命名为mspdbXY.dll(其中XY是十进制数字).

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

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

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

鉴于我更喜欢​​unixoid平台上的GDB,而不是Windows上的WinDbg和其他调试器,我无法确定是否支持MiniDumpWriteDumpWindows上的GDB中实际的故障转储格式(创建),所以我不确定可能是什么格式在这种情况下由GDB预期.

顺便说一句:如果您使用Windows XP或更高版本并且可以依赖于该事实,请使用AddVectoredExceptionHandler而不是SetUnhandledExceptionFilter准备编写崩溃转储.