在客户端的计算机上调试版本

Pra*_*ian 16 c++ debugging visual-studio visual-studio-debugging pdb-files

我们有一个使用Visual Studio 2005构建的本机C++ Win32 .exe,它可以在我们内部测试的所有机器上完美运行(XP 32位,Vista 32位和Windows 7 64位).但当然,它在客户端的32位Vista机器上反复崩溃.

在几个网站上挖掘我发现花絮表明我是否将PDB文件(vc80.pdb和projectName .pdb)以及可执行文件的Release版本发送给客户,有一些方法可以在发生崩溃时生成小型转储.然后,我可以将崩溃转储加载到Visual Studio中,并获取堆栈跟踪和一些其他有用的信息.微软的Dr. Watson实用程序似乎也参与了这个过程.

但我找不到任何关于实现这一目标的步骤的明确指示

  • 什么文件要发货?
  • 如何生成崩溃转储?
  • 以及如何将其加载到VS?

有人可以描述这个过程吗?

jsc*_*edl 11

我们能够从现场发布版本中获取故障转储,而不需要将pdb文件与我们的产品一起发送.

我相信,我们使用MiniDumpWriteDump()在我们的顶级异常处理程序中构建调用以创建崩溃转储文件.但即使没有这个,你也可以让用户使用任务管理器在崩溃时生成崩溃文件,我在这里提到:MSDN创建转储文件的说明.

获得转储文件后,客户会将其拉链并邮寄给您,然后将其放到Visual Studio上.在VS中,然后选择Debug Mixed或Debug Native,它使用pdb的本地副本向您显示调用堆栈等.

我刚刚从MS进程创建的转储示例


era*_*ran 6

你应该拥有的过程如下:

  1. 编译可执行文件并生成PDB文件.确保不对可执行文件使用的代码进行任何更改,或保留备份.
  2. 将可执行文件发送到客户端.无需发送PDB文件.发布它的唯一原因是,如果您想在客户端的计算机上进行调试,或者使用Process Explorer之类的工具来获取具有函数名称的堆栈跟踪.似乎都不适用于您的情况.
  3. 如果是XP/2003计算机,请使用drwtsn32配置故障转储的创建.如果它是Vista/7/2008,drwtsn32已经退役,你应该配置WER.另一个选择是使用ADPlus启动您的应用程序.
  4. 崩溃发生后,将转储交付给您,并将其加载到Visual Studio中.您必须拥有完全相同的代码,可执行文件和PDB才能顺利调试.

注意:

  • WinDbg对于在生产环境中进行调试很有用.它是一个非常强大的调试器,它是便携式的,但是如果你已经习惯了VS,那么使用它会更加舒适.
  • 如果您创建一个minidump,您将获得堆栈跟踪和一些变量值.如果您创建完整转储,您将获得完整的堆,包括所有变量 - 以及更大的转储文件...如果传输不是问题,请使用完全转储.
  • 如果您在Microsoft注册,则可以访问在程序在客户端站点崩溃时创建的转储.这是令人讨厌的"将信息发送给微软?" 当进程崩溃将转储发送到MS时,您获得的窗口,您将可以访问它...


Din*_*aiz 5

我感觉到你的痛苦.不久前就要做了.

无论如何,你试过谷歌Breakpad?

Breakpad是一个库和工具套件,允许您将应用程序分发给用户,并删除编译器提供的调试信息,在紧凑的"minidump"文件中记录崩溃,将它们发送回服务器,并从这些小型转储中生成C和C++堆栈跟踪.Breakpad还可以根据请求为未崩溃的程序编写小型转储.

Breakpad目前被谷歌Chrome,Firefox,谷歌Picasa,卡米诺,谷歌地球和其他项目使用

您可以在此处找到它:http://code.google.com/p/google-breakpad/

它与所提到的其他答案完全相同,但它会自动完成,为您节省大量时间和精力