构建后 bpl 文件中的异常

Posted

技术标签:

【中文标题】构建后 bpl 文件中的异常【英文标题】:Exception in bpl file after build 【发布时间】:2015-02-07 04:15:13 【问题描述】:

我创建了一些 delphi 组件,它们包含在一个 bpl 文件中。最近我注意到构建 bpl(已安装 bpl)会使 IDE 崩溃,并出现异常“MyComponents.bpl_unloaded”。但如果未安装 bpl,则不会出现此问题。我无法捕捉到这个异常,我不知道它在哪里引发(手动我不调用 unloadlibrary 或其他)。

在运行时和设计时,我的所有组件都可以正常工作。 ProjectGroup 可能仅包含我的包或带有/不带有我的组件的项目,但情况相同。 在我的项目中,我使用其他 vcl 组件(使用 Vcl.StdCtrls、Vcl.ExtCtrls、Vcl.Controls、Vcl.Forms、Vcl.AppEvnts、Vcl.Imaging.Jpeg、Vcl.Graphics)。 在包文件部分“需要”包含 rtl、vcl、vclimg、VirtualTreesR、Jcl。

我该如何解决这个问题? 提前致谢

【问题讨论】:

【参考方案1】:

在 IDE 中安装设计时包时,必须在重新构建时将其卸载。它必须先卸载,然后重新构建,然后重新加载。

显然,卸载阶段正在引发异常。我们无法准确说明为什么会引发该异常,但您的下一步是进行一些调试。实际上可以调试IDE。您可以打开 IDE 的第二个实例,并从第一个实例将调试器附加到该第二个 IDE 实例。然后,您可以从第二个 IDE 实例中卸载包,如果您已正确设置它,您应该在引发异常的地方中断。

作为交互式调试的替代方法,您可以使用 madExcept 之类的工具在异常点生成详细的堆栈跟踪。仅此一项就足以导致您遇到问题。

【讨论】:

确实如此。最近在探索 OTA 时,我发现在 IDE 的第二个实例中调试 BPL 的能力非常宝贵,但是通过在 BPL 源代码中大量使用 Asserts,通常可以避免对它的需要。我敢肯定你知道,但 OP 可能不是...... 谢谢!我以前从未使用过这种强大的乐器。起初我使用附加到进程的方法。我重复了崩溃的步骤,并在调用堆栈中得到了“ntdll.kiuserexceptiondispatcher”。但是断点或更有用的东西我没有得到。在我安装了 madExcept 并尝试过之后。但是在 IDE 崩溃后它无法捕获任何东西。我建议错误可能出在我的包装中的一个单元中。我从packege中删除了所有单元。在我分别(一个接一个)添加所有单元并重复步骤以崩溃之后。但我不能重复崩溃。 听起来像是单元初始化/完成的执行顺序有问题。

以上是关于构建后 bpl 文件中的异常的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下,Android NDK 工具链二进制文件是不是在有或没有异常的情况下构建?

安装重建的 C# 项目后未处理的异常

TestNG 电子邮件报告 - PKIX 路径构建异常

.net 构建异常 - 创建 .exe 的权限异常。在同一位置创建的其他文件没有问题

FAILURE:构建失败并出现异常。 * 其中:构建文件 'D:\AProjects\flutter_app\android\app\build.gradle' 行:24

Gradle 构建无法生成 .apk 文件