Jon*_*Lee 23 c++ windows mingw crash-reports
我有一个用MinGW编译的c ++应用程序,我一直在收到客户的崩溃投诉.因此,除了大量登录可能崩溃的部分(在发布新版本之前)之外,我一直在寻找一个崩溃报告器,它将帮助我在发生错误时找出堆栈跟踪和任何其他有用的调试信息.
是否存在与MinGW应用程序兼容的此类工具?(似乎当时的编译器和崩溃报告策略之间存在密切关系,因此问题).
有没有可以帮助我的Windows工具?该应用程序主要在Windows XP计算机上运行.
能够将信息写入文件足以满足我的目的.然后我可以让我的客户给我发信息.
我一直在研究google-breakpad和SetUnhandledExceptionFilter,但我仍然不知道它们是否会以任何方式有用.其他崩溃报告实用程序,例如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是十进制数字).
因此,如果您想创建错误报告,我强烈建议您不要专注于"编译器问题",而应该专注于调试器问题.以下是您可以去的一般方向:
.map文件(我知道这些扩展是几年前为Borland .map文件编写的)作为4的扩展,您还可以让GCC .S在编译期间创建(汇编)文件,以便在没有符号支持的情况下交叉引用源代码和崩溃转储.
鉴于我更喜欢unixoid平台上的GDB,而不是Windows上的WinDbg和其他调试器,我无法确定是否支持MiniDumpWriteDumpWindows上的GDB中实际的故障转储格式(创建),所以我不确定可能是什么格式在这种情况下由GDB预期.
顺便说一句:如果您使用Windows XP或更高版本并且可以依赖于该事实,请使用AddVectoredExceptionHandler而不是SetUnhandledExceptionFilter准备编写崩溃转储.