我有一个随机的运行时错误216出现在应用程序关闭.
我已尽可能调试,并在SysUtils.FinalizeUnits中抛出错误.
我已经检查了代码并确保释放所有创建的对象.
映射文件中不存在运行时错误0040054A上的数字.你知道这意味着什么吗?
任何人都可以告诉我如何找出错误是什么?
小智 8
这是非常老的 Delphi 问题 - 单元初始化/完成过程中的错误异常处理。
该问题易于重现 - 只需在任何单元的初始化块中生成任何程序错误/异常(例如被零除)。将正确创建异常。但是,在异常出现之前,单元终结过程会破坏异常对象。因此,当访问异常对象时,发生了“运行时错误 216”。
我怀疑内存泄漏(到目前为止我遇到的所有运行时错误 216 都是)并使用分析器(视觉检查永远不如工具)。由于您使用的是 Delphi XE,您应该尝试一下 AQTime(它已包含在内),另请参见
亲切的问候,弗兰克
由于运行时错误 216 是访问冲突,这可能表明您正在尝试使用已释放的内容。
映射文件中的地址基于 0,但这不是您的 EXE 文件加载到内存的位置。您的 EXE 在其首选基址加载,通常为 400000 美元。从您拥有的地址中减去该值。您在地图文件中查找的地址是 $0000054a。