在使用 SBCL、CL-OPENGL 和 Lispbuilder-SDL 编写简单游戏时,我遇到了一个奇怪的错误。在我让游戏运行后不久,我决定清理我所有的调试垃圾(打印语句等)。我这样做了,但是当我之后运行游戏时,我收到了“已中止”的消息,我的整个 Lisp 进程都死了,没有其他错误消息,也没有调试器提示。使用打印语句,我设法将问题隔离到调用 gl:translate。奇怪的是,如果我在该行之前放置一个 break 语句并尝试单步执行,我不会收到任何错误并且代码运行良好。似乎几乎是一种竞争条件,但我没有使用线程。有任何想法吗?
编辑:看来调用 gl:translate 不是问题。如果我执行以下操作:
(print 'first)
(print 'second)
(gl:translate ...)
我得到输出
FIRST
Aborted
就像我说的,我没有使用线程。
编辑 2:它适用于 CLisp。
编辑3:没关系,它没有。