可以附加到进程的 Lua 调试器。
我的公司有一个使用嵌入式 Lua 的程序,从磁盘加载 .lua
文件并重复执行其中定义的函数。
有没有办法连接到正在运行的进程并在我的 .lua
文件中设置断点?(我可以接受作为 Lua 发行版一部分的类似 gdb 的命令行调试,或者提供类似 Visual-Studio 的 GUI 断点的第三方 IDE。)
或者,考虑到运行时加载随机文件的性质,我要求的完全没有意义,也是不可能的吗?
编辑:看起来并不是没有意义的,因为 Lua 自己的 debug.getinfo()
函数可以确定给定函数的源文件,而 debug.sethook()
允许为每个输入的新代码行设置回调函数。因此,从磁盘加载源代码并能够告诉解释器正在执行该文件的特定代码行是合理的。问题仍然是:我如何连接到具有 Lua 解释器并注入自己的跟踪函数的现有进程(然后可以监听文件/行号对并暂停执行)?
原文链接 https://stackoverflow.com/questions/8419141
这是我搜索很久后使用的另一种替代方案。如果您有一个加载lua的外部可执行文件,我在几分钟内就可以让它工作。该操作非常响应快,它具有可以加载您代码的交互式调试器,您可以交互式地放置调试点。它没有编辑器,但我使用Scite或Crimson编辑器并启动可执行文件,您的主lua模块中的一行代码就可以启用调试器。
http://www.cushy-code.com/grld/ - 这个链接似乎已经失效了
我已经转向了eclipse.org/ldt,它有一个IDE和集成调试器,推荐使用
希望对您有所帮助
我一直在使用 Decoda 编辑器来实现这个功能。它可以让你连接到一个正在运行的 C++ 应用程序,在检测到你在 C++ 代码中运行 Lua 解释器之后,它会显示你的 Lua 源代码,你可以像平常一样添加断点和检查变量。
你应该使用 Decoda。
前往 Debug -> Processes -> Attach
来附加你的进程。这应该没有问题。
IntelliJ 的 Lua 插件带有可以工作的调试器,除了指向你的 Lua 解释器之外,不需要进行任何特殊的设置。
以下是它的录屏展示:
类似于 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。
最简单的方法是使用这个,多亏了天才作者 https://github.com/slembcke/debugger.lua
你不需要设置一个远程调试服务器,只需引入一个文件,然后简单地调用 dbg(),它将暂停,就像 gdb 一样
还有一个教程也捆绑在其中,去看看吧。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果你可以修改
.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 应显示源代码和当前行。