如何在Lua中“在调试器中”编写代码?

我刚刚尝试了一下 Lua 并尝试了 Koneki Eclipse 插件,非常不错。问题是,当我对正在调试的函数进行更改时,保存更改后更改并不会生效。所以我被迫重新启动应用程序。如果我可以在调试器中进行更改并且它们将像 Smalltalk 一样即时生效,或者像 Java 中的热代码替换一样在一定程度上生效,那将是非常不错的。有人知道是否可能吗?

点赞
用户1442917
用户1442917

这在一定程度上是可以实现的,但存在一些限制。我一直在开发一个 IDE/debugger,它提供了这个功能。它可以让你访问远程控制台,在应用程序运行的上下文/环境中执行命令。该 IDE 还支持 实时编码,在你修改代码时会重新加载修改后的代码。您可以在这里查看演示这里

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

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

最近在 Lua 邮件列表上还有相关讨论

2013-04-25 15:53:03