在显然随机的点上,Windows显示“[App]已停止工作”对话框.它是ntdll.dll中的APPCRASH,异常代码4000001f,异常偏移量000a2562.这里变得棘手:只有在调试器下运行应用程序时才会出现这种情况.但是,调试器不会捕获此异常,并且在Windows显示此对话框时,IDE没有响应.正常运行时不会发生此错误,即不在IDE调试器中.
我无法在调试器外重现它,所以我无法运行程序并在它已经崩溃时附加.当Windows显示此对话框时,我无法暂停执行,因为IDE没有响应.我可以手动跟踪代码行以查看它出现的位置.有几个,它发生的地方显然是随机的.有一段时间,它在创建一个线程时显示一个窗口(或新表单)一段时间.
编辑:我已将其跟踪到IDE:如果我暂停一个断点并单击“线程状态”选项卡,程序将立即使用上面的对话框崩溃,即使它理论上已暂停.在这种情况下,IDE仍然保持响应.这真的很奇怪.
更多信息
我刚刚将我的开发环境移到了VMWare Fusion.该错误还发生在我的新计算机上运行来自旧(本机Windows)计算机的构建;在旧计算机上使用相同的EXE文件时不会发生这种情况.这让我想知道它是否与Fusion或我的新设置中的某些内容有关.
我在跑步:
> OSX Lion 10.7.1上的WMWare Fusion 3.1.3上的Windows 7 Pro x64,全部更新. Fusion在我的一个屏幕上以“全屏”模式运行.
>本地运行Windows 7(不在VM中)的同事不会遇到此问题.我也没在旧的Vista电脑上.
> Embarcadero RAD Studio 2010,完全更新(我希望;大约有五个更新并将它们全部按顺序排列是棘手的.)我安装了DDevExtensions 2.4.1,以及最新的IDE Fix Pack:卸载这两个都没有效果.
>该应用程序主要用C语言编写,带有Delphi的片段.它是32位.
>我们使用EurekaLog,但异常也没有被它捕获. (通常,调试器首先捕获异常,然后由EurekaLog捕获.)
>运行调试版本(没有EurekaLog,额外的调试信息等,调试DCU设置为true)也会重现它.但是,C Builder项目设置对话框的Delphi链接页面上的“调试DCU”选项似乎没有任何效果 – 我无法进入VCL代码并找到实际触发错误的行.
> Codeguard(检测内存访问错误,双重释放,释放内存中的访问,缓冲区溢出等)不报告任何内容.
解决方法
我知道调试它的最好方法是下载完整的FastMM并在启用完整调试选项的情况下运行.
如果这没有帮助,那么您将逐渐删除部分代码,直到您可以隔离问题为止.
我在D2010中看到的另一个问题是将本地类定义(即类内部类)与泛型混合时的问题.生成的代码很好,但是调试DCU是错误的,当单步执行代码时,调试器跳转到错误的文件并在不久之后死掉.您似乎没有完全相同的问题,但IDE死亡中有相似之处.
最后,我建议您怀疑自己的代码而不是VMware.总是很容易责怪其他事情,但根据我的经验,每当我这样做时,最终总是我的代码!