Windows上的C++应用程序崩溃检测

Nay*_*iya 1 c++ windows

我的一个C++ MFC应用程序在一些Windows(7,xp)计算机上随机崩溃.这个应用程序使用一些第三方库(Apache轴),当我检查依赖walker时,它显示加载与此第三方库相关的DLL后的应用程序退出.

所以我需要一种方法来检测这个应用程序的崩溃原因是什么.有没有办法做到这一点?

  • 我读过它可以使用.pdb文件与.exe文件一起主机识别崩溃问题,但像往常一样微软没有明确的文档如何使用.
  • 我尝试使用IBM purify试用版.但我没有显示任何有效信息.
  • 我试着用WinDbg.但我找不到如何使用它.

任何协助真的很感激.

编辑:崩溃报告添加

Problem Event Name:                        APPCRASH
  Application Name:                             installer.exe
  Application Version:                           5.0.1.0
  Application Timestamp:                     51ac0bdc
  Fault Module Name:                          AxisXMLParserXerces.dll
  Fault Module Version:                        1.0.0.0
  Fault Module Timestamp:                  51ac0016
  Exception Code:                                  c0000005
  Exception Offset:                                0000161d
  OS Version:                                          6.1.7601.2.1.0.256.4
  Locale ID:                                             18441
  Additional Information 1:                  0a9e
  Additional Information 2:                  0a9e372d3b4ad19135b953a78882e789
  Additional Information 3:                  0a9e
Additional Information 4:  0a9e372d3b4ad19135b953a78882e789`
Run Code Online (Sandbox Code Playgroud)

Cap*_*ous 5

以下是您可以尝试找到问题根源的几个步骤.

  1. 构建应用程序的发行版本.确保已启用生成PDB文件.
  2. 发送给客户.确保他们更改了"正在检查解决方案"设置(见下文).
  3. 崩溃时,应选择"显示程序详细信息"
  4. 让他们记录"故障模块名称","故障执行代码"和"故障执行偏差"
  5. 启动您发送的完全相同的版本.可执行文件和PDB文件应该位于它们构建时最初保存到的目录中.(例如解决方案\项目\发布).我建议您在发送文件之前将它们压缩到整个"发布"目录并将其存放在某处.这样您就可以获得精确的副本,以防您意外地进行干净或其他更改文件的操作.
  6. 在Visual Studio中使用调试器附加到进程.(在"调试"菜单中)
  7. 打破应用程序的执行.(再次,在"调试"菜单中)
  8. 打开反汇编窗口.(再次,在"调试"菜单中)
  9. 在反汇编窗口顶部的"地址"输入行中,根据模块的当前加载地址和崩溃报告提供的"执行偏移"输入崩溃的地址.如果加载模块,则需要修改应用程序以在启动时强制加载它(这将要求您向它们发送新版本并从步骤1重新开始).确保检查错误,因为崩溃可能是DLL加载失败的结果.

从这里开始,您必须根据您对应用程序和第三方库的知识和经验来确定它.在预期发生崩溃的位置处放置断点.每当遇到断点时,请查看调用堆栈以查看调用的来源.问题可能出在您的代码第三方库中(但可能是您的代码).

你应该努力重现崩溃.让用户记录崩溃发生时他们正在执行的操作.还包括它们包括应用程序或库生成的任何日志.

这将增加您找到问题的机会,但正如我上面所说,您需要依赖于您对应用程序和库的了解.

我建议您在开始之前向应用程序添加一些代码以强制崩溃并自行完成这些步骤,以便您熟悉它们.在你做对了之前可能需要几次尝试,你可能需要稍微调整一下步骤,并根据你的环境和应用进行定制.请记住在将崩溃代码发送给用户之前删除它.

因为这似乎是你第一次接触使用调试器准备一些挫败感.这是正常的.

*其中一些步骤假定您使用的是Visual Studio.WinDbg有不同的界面,但概念是相同的.

**这些步骤也假设Windows 7. Windows XP在应用程序崩溃时显示包含类似信息的窗口,不需要重新配置.

..
.

更改检查解决方案设置

  1. 打开控制面板
  2. 打开操作中心
  3. 点击""更改操作中心设置"
  4. 点击"问题报告设置"
  5. 选择"每次出现问题时,请在检查解决方案之前询问我.