0

我目前正在使用 TGUI(基于 SFML 的 GUI 库)和 ECL(所以我可以使用 Lisp 进行配置和脚本)。它在 Linux/gcc 上运行良好,但在 Windows/MinGW ECL 上会抛出错误:

Condition of type: FLOATING-POINT-INVALID-OPERATION
#<a FLOATING-POINT-INVALID-OPERATION>
Available restarts:

1. (CONTINUE) Ignore signal

Top level in: #<process TOP-LEVEL>.
>

抛出错误的代码点(创建它的最小代码)是:

empty_panel = tgui::Panel::Ptr(*cur_gui, "empty_panel");
empty_panel->setSize(cfg.res.x, cfg.res.y);
empty_panel->setBackgroundColor(sf::Color::Transparent);

tgui::EditBox::Ptr txt_test(*empty_panel, "txt_test");

请注意,我可以很好地创建标签、按钮、复选框等 - 但是一旦我尝试制作编辑框,ECL 就会抱怨。这对我来说没有任何意义。TGUI 和 ECL 是完全不相关的库,不共享功能或以我所知道的任何方式相互依赖。有谁知道可能导致这种行为的原因?

编辑:刚刚使用最新版本的 MinGW 对 SFML、TGUI 和 ECL 进行了完整的重新编译,它仍然以完全相同的方式中断。所以我决定已经足够了,我将重写我的项目以使用 SFGUI。 从现在开始,这个问题只具有学术意义。

4

1 回答 1

0

我终于发现那里可能发生了什么:

当 ECL 运行时,它会尝试处理它所监视的所有未捕获的异常、段错误等,即使它们从未与 LISP 交互。它处理它们的方式是在它们发生时立即跳转到 REPL,以允许手动调试。

对于由于 LISP 程序或与之交互的 C/C++ 函数中的错误而发生的任何事情,这是明智的做法,但是当错误发生在不相关的 C++ 代码中时(例如假定的 TGUI 中的错误),这会有点令人困惑。

最小的重现方法:加载 ECL 并尝试一些无效操作,如下所示:

#include <ecl/ecl.h>
int main(int argc, char **argv) {
cl_boot(argc, argv);
atexit(cl_shutdown);
int x = 1/0;
return EXIT_SUCCESS; }
于 2015-09-14T13:05:17.807 回答