CL-OPENGL:“开放式图形库”;“中止”;论翻译

CL-OPENGL:“开放式图形库”;“中止”;论翻译,opengl,common-lisp,sbcl,Opengl,Common Lisp,Sbcl,在使用SBCL、CL-OPENGL和Lispbuilder SDL编写一个简单的游戏时,我发现了一个奇怪的错误。在游戏开始运行后不久,我决定清理掉所有调试的积垢(打印语句等)。我这样做了,但当我运行游戏后,我收到消息“中止”,我的整个Lisp进程死亡,没有其他错误消息,也没有调试器提示。使用print语句,我设法将问题隔离到调用gl:translate。奇怪的是,如果我在那一行之前放了一个break语句,并尝试单步执行,我就不会收到任何错误,代码也会正常运行。看起来几乎是一种竞争条件,但我不使用

在使用SBCL、CL-OPENGL和Lispbuilder SDL编写一个简单的游戏时,我发现了一个奇怪的错误。在游戏开始运行后不久,我决定清理掉所有调试的积垢(打印语句等)。我这样做了,但当我运行游戏后,我收到消息“中止”,我的整个Lisp进程死亡,没有其他错误消息,也没有调试器提示。使用print语句,我设法将问题隔离到调用gl:translate。奇怪的是,如果我在那一行之前放了一个break语句,并尝试单步执行,我就不会收到任何错误,代码也会正常运行。看起来几乎是一种竞争条件,但我不使用线程。有什么想法吗

编辑:调用gl:translate似乎不是问题所在。如果我这样做:

(print 'first)
(print 'second)
(gl:translate ...)
我得到输出

FIRST
Aborted
就像我说的,我没有使用线程

编辑2: 它在CLisp中工作

编辑3:
没关系,它没有。

我通过切换回纯SDL修复了它,这令人失望,但它可以工作。

最可能的原因是将不正确的指针传递到外部函数导致堆损坏。在没有看到代码的情况下给出具体建议是很困难的,但我会仔细修改所有FFI调用,以检查可能存在的指针/内存管理问题。我没有直接使用任何外部函数,因此如果这是CL-OPENGL中出现错误的原因,Valgrind也不会显示任何输出。我的意思是,在“中止”之后,没有其他东西,程序只是退出。