我的公司有一个程序,它在运行时嵌入了Lua,.lua从磁盘加载文件并重复执行在其中定义的函数.
有没有办法附加到正在运行的进程并在我的.lua文件中设置断点?(我接受gdb风格的命令行调试作为Lua发行版的一部分,或者接受提供类似Visual-Studio的GUI断点的第三方IDE.)
或者,鉴于运行时加载来自磁盘的随机文件的性质,我要求的是完全荒谬和不可能的?
编辑:看起来它并不荒谬,因为Lua自己的debug.getinfo()函数可以确定给定函数的源文件,并debug.sethook()允许对输入的每个新代码行进行回调.因此,从磁盘加载源代码并且能够告诉解释器何时从该文件执行特定代码行是合理的.问题仍然存在:如何锁定具有Lua解释器的现有进程并注入我自己的跟踪功能(然后可以查看文件/行号对并暂停执行)?
Mic*_*man 11
如果您可以修改.lua文件,则可以在需要调试的任何内容之前插入以下调用:
require 'remdebug.engine'.start()
Run Code Online (Sandbox Code Playgroud)
它启动RemDebug Lua调试器引擎并尝试连接到控制器.如果它无法连接,它将继续正常运行.我对调试器引擎做了一些修复,比如处理临时变量,我的学生正在研究调试器GUI(明年到期).
在此期间,您可以尝试Lua Development Tools是否适合您.它具有类似于RemDebug 的调试器,应该可以设置如下:
require("debugger")(host, port, idekey)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用SciTE-debug,它是SciTE编辑器的扩展,可以作为RemDebug的控制器.只需确保将调用插入remdebug.engine.startLua代码中的某个位置并将其插入SciTE输出窗口:
:debug.target=remote.lua
Run Code Online (Sandbox Code Playgroud)
当您启动程序时,SciTE应显示源和当前行.
这是我经过多次搜索后使用的替代方案。如果你有一个加载 lua 的外部可执行文件,我会在几分钟内完成它。该操作非常敏感,它有一个交互式调试器,可以加载您的代码,您可以交互式地放置调试点。它没有编辑器,但我使用 scite 或 crimson 编辑器并启动可执行文件,主 lua 模块中的一行启用调试器。
http://www.cushy-code.com/grld/ - 此链接现在似乎已失效
我已经转移到eclipse.org/ldt它有一个 ide 和集成调试器,推荐
哈