我有一个奇怪的间歇性崩溃,只有在我无法解决的某些情况下才会发生,我正在寻求 SO 的建议来解决它。
错误
在明显的随机点上,Windows 显示“[App] 已停止工作”对话框。它是ntdll.dll中的一个APPCRASH,异常代码4000001f,异常偏移000a2562。这就是它变得棘手的地方:这只发生在调试器下运行应用程序时。但是,调试器没有捕获此异常,并且在 Windows 显示此对话框时,IDE 没有响应。正常运行时不会出现此错误,即不在 IDE 调试器中。
我无法在调试器之外重现它,所以当它已经崩溃时我无法运行程序并附加它。当 Windows 显示此对话框时,我无法暂停执行,因为 IDE 没有响应。我可以手动跟踪代码行以查看它发生的位置。有几个,它发生的地方显然是随机的。有一段时间在显示窗口(或新窗体)时发生,有一段时间在创建线程时发生。
编辑:我已将其跟踪到 IDE:如果我在断点处暂停并单击“线程状态”选项卡,程序将立即崩溃并出现上述对话框,即使理论上它已暂停。在这种情况下,IDE 保持响应。这真的很奇怪。
更多信息
我刚刚将我的开发环境移至VMWare Fusion。在我的新计算机上从我的旧(本机 Windows)计算机运行构建时也会出现该错误;那台旧计算机上的相同 EXE 文件没有发生这种情况。这让我想知道它是否与 Fusion 或我的新设置中的某些东西有关。
我在跑步:
- Windows 7 Pro x64 on WMWare Fusion 3.1.3 on OSX Lion 10.7.1,全部更新。Fusion 在我的一个屏幕上以“全屏”模式运行。
- 本机(不在 VM 中)运行 Windows 7 的同事不会遇到此问题。我也没有在我的旧 Vista 计算机上。
- Embarcadero RAD Studio 2010,完全更新(我希望;大约有五个更新,并且将它们全部按顺序排列是很棘手的。)我安装了 DDevExtensions 2.4.1,并且还安装了最新的 IDE Fix Pack:卸载这两个都没有效果。
- 该应用程序主要是用 C++ 编写的,带有 Delphi 的片段。它是 32 位的。
- 我们使用EurekaLog,但它也没有捕获到异常。(通常,调试器会先捕获异常,然后再由 EurekaLog 捕获。)
- 运行调试版本(没有 EurekaLog、额外的调试信息等,调试 DCU 设置为 true)也会重现它。但是,C++Builder 项目设置对话框的 Delphi 链接页面上的“调试 DCUs”选项似乎没有效果 - 我无法进入 VCL 代码并找到实际触发错误的行。
- Codeguard(检测内存访问错误、双重释放、释放内存中的访问、缓冲区溢出等)不报告任何内容。