gpt4 book ai didi

delphi - 如何跟踪仅在调试器下发生但未被调试器捕获的间歇性崩溃?

转载 作者:行者123 更新时间:2023-12-03 14:46:28 24 4
gpt4 key购买 nike

我遇到奇怪的间歇性崩溃,仅在某些情况下发生,我无法解决该崩溃,并且我正在寻求 SO 的建议以了解如何解决该问题。

错误

在明显的随机点,Windows 显示“[应用程序] 已停止工作”对话框。它是ntdll.dll中的一个APPPCRASH,异常代码4000001f,异常偏移000a2562。这就是它变得棘手的地方:这只发生在调试器下运行应用程序时。但是,调试器不会捕获此异常,并且在 Windows 显示此对话框时,IDE 没有响应。正常运行时(即不在 IDE 调试器内)不会出现此错误。

Screenshot of the Windows crash dialog

我无法在调试器之外重现它,因此当程序已经崩溃时我无法运行程序并附加。当 Windows 显示此对话框时,我无法暂停执行,因为 IDE 没有响应。我可以手动跟踪代码行以查看它发生的位置。有好几种,而且出现的位置显然是随机的。有时在显示窗口(或新表单)时发生,有时在创建线程时发生。

编辑:我已将其跟踪到 IDE:如果我在断点处暂停并单击“线程状态”选项卡,程序将立即崩溃并显示上述对话框尽管理论上它已经暂停了。在这种情况下,IDE 仍保持响应。这实在是太奇怪了。

更多信息

我刚刚将我的开发环境移至 VMWare Fusion 。在我的新计算机上运行我的旧( native Windows)计算机上的构建时也会出现该错误;旧计算机上的相同 EXE 文件不会发生这种情况。这让我想知道它是否与 Fusion 或我的新设置中的某些内容有关。

我正在运行:

  • Windows 7 Pro x64,WMWare Fusion 3.1.3,OSX Lion 10.7.1,全部更新。 Fusion 正在我的一个屏幕上以“全屏”模式运行。
  • 一位同事在 native 运行 Windows 7(而不是在虚拟机中)不会遇到此问题。我在旧的 Vista 计算机上也没有。
  • Embarcadero RAD Studio 2010,完全更新(我希望;大约有五个更新,将它们全部按顺序排列是很棘手的。)我安装了 DDevExtensions 2.4.1,也安装了最新的 IDE 修复包:卸载这两个更新没有任何影响。效果。
  • 该应用程序主要用 C++ 编写,并带有 Delphi 代码片段。它是 32 位的。
  • 我们使用EurekaLog ,但异常也没有被它捕获。 (通常情况下,异常会首先由调试器捕获,然后由 EurekaLog 捕获。)
  • 运行调试构建(无 EurekaLog、额外调试信息等、调试 DCU 设置为 true)也会重现它。但是,C++Builder 项目设置对话框的 Delphi 链接页面上的“调试 DCU”选项似乎没有效果 - 我无法进入 VCL 代码并找到实际触发错误的行。
  • Codeguard(检测内存访问错误、双重释放、已释放内存中的访问、缓冲区溢出等)不报告任何内容。

最佳答案

这具有内存损坏的所有特征。它仅在您在一个特定环境下运行时出现,并且每次出现在不同的位置。都是典型症状。

据我所知,调试此问题的最佳方法是下载完整的 FastMM 并在启用完整调试选项的情况下运行。

如果这没有帮助,那么您只能逐一删除部分代码,直到可以隔离问题为止。

我在 D2010 中看到的另一个问题是将本地类定义(即类中的类)与泛型混合时出现的问题。生成的代码很好,但调试 DCU 是错误的,当单步执行代码时,调试器会跳转到错误的文件,并很快就会终止。您似乎没有遇到完全相同的问题,但 IDE 死亡有相似之处。

最后,我建议您怀疑自己的代码,而不是 VMware。人们总是很容易责怪其他东西,但根据我的经验,每当我这样做时,最终总是我的代码!

关于delphi - 如何跟踪仅在调试器下发生但未被调试器捕获的间歇性崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7143895/

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