2013-04-25 61 views
6

我刚和Lua玩了一下,并尝试了Koneki eclipse插件,这很不错。问题是,当我在一个函数中进行更改时,我正在调试此更改在保存更改时无法生效。所以我不得不重新启动应用程序。如果我可以在调试器中进行更改,那么它会非常好,并且它们将随时生效,例如使用Smalltalk或在Java中进行热代码替换时。任何人都知道这是否可能?如何在Lua中编写代码“在调试器中”?

回答

5

在某种程度上可能会有一些限制。我一直在开发提供此功能的IDE/debugger。它使您可以访问远程控制台,以在正在运行的应用程序的上下文/环境中执行命令。 IDE还支持live coding,在您对其进行更改时重新加载修改后的代码;请参阅演示here

主要限制是您不能修改当前运行的功能(至少不需要对Lua VM进行更改)。这意味着只有当您退出并重新输入该功能后才能看到您对当前运行功能所做更改的效果。它适用于反复调用相同功能的环境(例如游戏引擎调用draw),但在您的情况下可能不起作用。

另一个挑战是处理upvalues(在你的函数之外创建并在其中引用的值)。有一些方法可以“读”当前的upvalues,并在创建(new)函数时重新创建它们,但它需要进行一些代码分析来查找将重新创建哪些函数以查询upvalue,获取当前值,然后为这些价值创造新的环境并为它们分配适当的价值。我当前的实现不会这样做,这意味着您需要使用全局变量作为解决方法。

前一天在Lua邮件列表中也有relevant discussion

+0

有见地的答案,保罗。谢谢。 – OlliP 2013-04-25 17:51:39

+0

我认为这在Smalltalk中起作用的原因是因为整个代码是一个完全在内存中的二进制快照(在Smalltalk中称为“映像”)(当Kava已经存在时,Smalltalk链接库会晚很多)。所以我想Smalltalk似乎是你能做到这一点的唯一语言。很可惜... – OlliP 2013-04-25 19:56:15