6

我只是玩了一下 Lua 并尝试了 Koneki eclipse 插件,这非常好。问题是,当我对正在调试的函数进行更改时,更改在保存更改时不会生效。所以我不得不重新启动应用程序。如果我可以在调试器中进行更改并且它们会像使用 Smalltalk 或在某种程度上像 Java 中的热代码替换那样即时生效,那就太好了。有人知道这是否可能吗?

4

1 回答 1

5

在一定程度上有一些限制是可能的。我一直在开发提供此功能的IDE/调试器。它使您可以访问远程控制台以在正在运行的应用程序的上下文/环境中执行命令。IDE 还支持实时编码,它会在您更改代码时重新加载修改过的代码;在此处查看演示。

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

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

前几天在 Lua 邮件列表上也有相关讨论。

于 2013-04-25T15:53:03.977 回答