可以附加到进程的 Lua 调试器。

我的公司有一个使用嵌入式 Lua 的程序,从磁盘加载 .lua 文件并重复执行其中定义的函数。

有没有办法连接到正在运行的进程并在我的 .lua 文件中设置断点?(我可以接受作为 Lua 发行版一部分的类似 gdb 的命令行调试,或者提供类似 Visual-Studio 的 GUI 断点的第三方 IDE。)

或者,考虑到运行时加载随机文件的性质,我要求的完全没有意义,也是不可能的吗?

编辑:看起来并不是没有意义的,因为 Lua 自己的 debug.getinfo() 函数可以确定给定函数的源文件,而 debug.sethook() 允许为每个输入的新代码行设置回调函数。因此,从磁盘加载源代码并能够告诉解释器正在执行该文件的特定代码行是合理的。问题仍然是:我如何连接到具有 Lua 解释器并注入自己的跟踪函数的现有进程(然后可以监听文件/行号对并暂停执行)?

原文链接 https://stackoverflow.com/questions/8419141

点赞
stackoverflow用户221509
stackoverflow用户221509

如果你可以修改 .lua 文件,你可以在需要调试的地方之前插入以下调用:

require 'remdebug.engine'.start()

它会启动 RemDebug Lua 调试器引擎并尝试连接到一个控制器。如果它无法连接,它将继续正常运行。我做了一些修复调试器引擎的工作,例如处理临时变量,我的学生正在开发调试器 GUI(计划明年发布)。

与此同时,您也可以尝试 Lua Development Tools。它具有类似于 RemDebug 的 调试器,可以按照以下方式进行设置:

require("debugger")(host, port, idekey)

或者,您可以使用 SciTE-debug,它是 SciTE 编辑器的扩展程序,并且可以作为 RemDebug 的控制器。只需确保在您的 Lua 代码中的某个地方插入调用 remdebug.engine.start,并在 SciTE 输出窗口中插入以下内容:

:debug.target=remote.lua

当您启动程序时,SciTE 应显示源代码和当前行。

2011-12-07 18:05:46
stackoverflow用户416047
stackoverflow用户416047

这是我搜索很久后使用的另一种替代方案。如果您有一个加载lua的外部可执行文件,我在几分钟内就可以让它工作。该操作非常响应快,它具有可以加载您代码的交互式调试器,您可以交互式地放置调试点。它没有编辑器,但我使用Scite或Crimson编辑器并启动可执行文件,您的主lua模块中的一行代码就可以启用调试器。

http://www.cushy-code.com/grld/ - 这个链接似乎已经失效了

我已经转向了eclipse.org/ldt,它有一个IDE和集成调试器,推荐使用

希望对您有所帮助

2011-12-12 09:27:12
stackoverflow用户150130
stackoverflow用户150130

我一直在使用 Decoda 编辑器来实现这个功能。它可以让你连接到一个正在运行的 C++ 应用程序,在检测到你在 C++ 代码中运行 Lua 解释器之后,它会显示你的 Lua 源代码,你可以像平常一样添加断点和检查变量。

2011-12-15 11:42:14
stackoverflow用户157880
stackoverflow用户157880

你应该使用 Decoda

前往 Debug -> Processes -> Attach来附加你的进程。这应该没有问题。

2011-12-16 00:12:02
stackoverflow用户151501
stackoverflow用户151501

IntelliJ 的 Lua 插件带有可以工作的调试器,除了指向你的 Lua 解释器之外,不需要进行任何特殊的设置。

以下是它的录屏展示:

http://www.screencast.com/t/CBWIkoZPg

2012-01-09 16:45:11
stackoverflow用户1442917
stackoverflow用户1442917

类似于 Michal Kottman 所描述的情况,我实现了一个基于 RemDebug 的调试器,但是增加了其他修复和功能(在 Github 上:https://github.com/pkulchenko/MobDebug)。

您可以在想要开始调试的位置使用 require("mobdebug").start("localhost", 8171) 更新您的 .lua 文件。随后您就可以使用命令行调试器执行命令、设置断点、评估/执行表达式等。

作为替代方案,您可以使用 ZeroBrane Studio IDE,它与调试器集成,并为您加载代码和在漂亮的 GUI 中执行相同的调试器命令提供了前端。如果您想要看到这个 IDE 的实际效果,我这里有一个简单的演示:http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style

2012-06-07 18:50:33
stackoverflow用户7990615
stackoverflow用户7990615

最简单的方法是使用这个,多亏了天才作者 https://github.com/slembcke/debugger.lua

你不需要设置一个远程调试服务器,只需引入一个文件,然后简单地调用 dbg(),它将暂停,就像 gdb 一样

还有一个教程也捆绑在其中,去看看吧。

2017-05-10 08:54:34