gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:13:10 26 4
gpt4 key购买 nike

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

所以我需要一种方法来检测此应用程序崩溃的原因。有什么办法吗?

  • 我读到它可以使用 .pdb 文件与 .exe 文件一起托管来识别崩溃问题,但像往常一样,Microsoft 没有明确的文档如何使用.
  • 我尝试使用 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`

最佳答案

您可以采取以下几个步骤来尝试找出问题的根源。

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

从这里开始,您将不得不根据您对应用程序和第三方库的知识和经验来实现它。在预计会发生崩溃的位置放置一个断点。每当命中断点时,查看调用堆栈以了解调用的来源。问题可能出在您的代码第三方库(但可能是您的代码)。

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

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

我建议您在开始之前向您的应用程序添加一些代码以强制崩溃并亲自运行这些步骤以便您熟悉它们。您可能需要尝试几次才能正确使用,并且您可能需要稍微调整这些步骤并根据您的环境和应用程序进行调整。请记住在将崩溃代码发送给用户之前删除它。

因为这似乎是您第一次接触使用调试器,所以请准备好迎接一些挫折。这是正常的。

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

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

..
.

更改解决方案设置检查

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

关于Windows 上的 C++ 应用程序崩溃检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com