我们有一个使用Visual Studio 2005构建的原生C ++ Win32 .exe,它可以在我们内部测试的所有机器上完美运行(XP 32位,Vista 32位和Windows 7 64位)。但当然,它在客户端的32位Vista机器上反复崩溃。
在几个网站上挖掘我发现花絮表明我是否将PDB文件(vc80.pdb& projectName .pdb)与可执行文件的发布版本一起发送给客户,发生崩溃时生成小型转储的某种方式。然后,我可以将崩溃转储加载到Visual Studio中,并获取堆栈跟踪和一些其他有用的信息。微软的Dr. Watson实用程序似乎也参与了这个过程。
但我找不到任何关于实现这一目标的步骤的明确指示
有人可以描述这个过程吗?
答案 0 :(得分:11)
我们可以从我们的Release版本中获取崩溃转储,并且不需要将pdb文件与我们的产品一起发送。
我相信,我们使用MiniDumpWriteDump()在我们的顶级异常处理程序中构建调用来创建崩溃转储文件。但即使没有这个,你也可以让用户在崩溃时使用我相信的任务管理器生成崩溃文件,如下所述:MSDN Instructions for creating dump file。
获得转储文件后,客户会将其拉链并邮寄给您,然后将其放到Visual Studio上。在VS中,然后选择Debug Mixed或Debug Native,它使用pdb的本地副本向您显示调用堆栈等。
答案 1 :(得分:6)
你应该拥有的过程如下:
注意:
答案 2 :(得分:5)
我感觉到你的痛苦。不久前不得不这样做。
无论如何,你试过google Breakpad吗?
Breakpad是一个库和工具套件,允许您分发 使用编译器提供的调试信息向用户应用程序 删除,记录紧凑的“minidump”文件中的崩溃,将它们发回 您的服务器,并从这些小型转储产生C和C ++堆栈跟踪。 Breakpad也可以根据请求编写minidumps 没有坠毁。
Breakpad目前由Google Chrome,Firefox,Google Picasa使用, Camino,Google Earth和其他项目
您可以在此处找到它:http://code.google.com/p/google-breakpad/
它与所提到的其他答案完全相同,但它自动完成,为您节省了大量时间和精力
答案 3 :(得分:3)
我之前做过这个,我想我跟着this guide。如果它不起作用,请查看Windbg实用程序,我记得您不需要安装它,只需复制并运行,即使是从USB记忆棒
答案 4 :(得分:3)
我在DDj上写了两篇关于事后调试的文章,这可能对你有帮助:
事后调试 http://drdobbs.com/tools/185300443
和 重新审视事后调试 http://drdobbs.com/architecture-and-design/227900186
第二篇文章包含从客户端计算机填充堆栈转储的源代码,其中包含从map或pdb文件中检索的符号信息。
答案 5 :(得分:1)
如果您的客户端使用的是Vista SP1或更高版本,则可以将系统配置为每次应用程序崩溃时生成本地转储文件。您可以在MSDN site上找到完整的文档。
您可以将所有PDB保密。只有在实际分析转储文件时才需要这些。如果您想跟踪与您发布的产品版本相对应的PDB,您应该强烈考虑使用符号服务器。