MinGW应用程序的崩溃报告

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

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

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

能够写信息到一个文件就足够了我的目的。 然后,我可以要求我的客户给我发送信息。

我一直在寻找谷歌的breakpad和SetUnhandledExceptionFilter ,但我仍然不知道他们会以任何方式有用。 其他崩溃报告实用程序(如crashrpt )是为Visual C ++devise的,所以我想用MinGW尝试它们并没有什么意义。

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

  • 解决随机崩溃
  • DrMinGW(即时debugging器)
  • 我用来获取堆栈跟踪的一些代码
  • 有些人有同样的问题:
    • 核心在明暗下倾倒
    • 在Mingw32上创build并读取gdb核心转储
    • 用MinGW + GDB进行事后debugging

事实上这个问题并没有让崩溃报告起作用。 这对于DbgHelp库函数来说并不重要,最重要的是MiniDumpWriteDump 。 但是请记住,要在旧系统上重新分配DbgHelp库,并观察您打算调用的函数的版本要求 – 新版本的Windows至少带有该库的某个版本。

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

所以,如果你想创建bug报告,我强烈建议不要专注于“编译器问题”,而应该专注于调试器问题。 这里是你可以去的大方向:

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

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

鉴于我更喜欢​​unixoid平台上的GDB,但Windows上的WinDbg和其他调试器,我不能确定在Windows上的GDB是否支持实际崩溃转储格式(使用MiniDumpWriteDump创建),所以我不确定什么格式可以在这种情况下,广东发展银行预计会是

顺便说一句:如果您使用Windows XP或更高版本,可以依靠这一事实,请使用AddVectoredExceptionHandler而不是SetUnhandledExceptionFilter准备编写故障转储。