MinGW应用程序的崩溃报告

时间:2011-03-07 21:38:03

标签: c++ windows mingw crash-reports

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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库)没有符号(可能是一个太陡峭的学习曲线,除非你已经知道)
  5. 作为4的扩展,您还可以让GCC在编译期间创建.S(汇编)文件,以便在没有符号支持的情况下交叉引用源代码和崩溃转储。

    鉴于我更喜欢​​单一平台上的GDB,而是Windows上的WinDbg和其他调试器,我无法确切地说在Windows上的GDB中是否支持实际的故障转储格式(使用MiniDumpWriteDump创建),所以我在这种情况下,我不确定GDB可能会采用什么格式。

    BTW:如果您使用的是Windows XP或更高版本且可以依赖这一事实,请使用AddVectoredExceptionHandler代替SetUnhandledExceptionFilter来准备编写崩溃转储。