Lua脚本错误检查。
有没有可能在不执行脚本的情况下检查lua脚本中是否存在错误?我有如下代码:
如果(luaL_loadbuffer(L,data,size,name))
{
fprintf(stderr,“%s”,lua_tostring(L,-1));
lua_pop(L,1);
}
如果(lua_pcall(L,0,0,0))
{
fprintf(stderr,“%s”,lua_tostring(L,-1));
lua_pop(L,1);
}
但是如果脚本包含错误,则通过第一个if,脚本将被执行。我想知道它是否在加载时包含错误,而不是在执行时。这可行吗?
原文链接 https://stackoverflow.com/questions/5249709
函数本质上是值,因此命名函数实际上就是该名称的变量。变量根据其定义,可以在脚本执行时更改。反正某个人可能会不小心重新定义其中一个函数。总的来说,根据你所说的预定义函数的参数传递和/或实际实现(例如,其中一个可取消设置本身或其他函数),如果你不愿缩小一些需求,那就无法保证事情能够正常工作。Lua 对于你所寻找的并不适合。 :)
如果你想要无瑕疵测试:创建一个虚拟环境,将所有必要的东西放在那里,然后查看在整个过程中(加载、执行等)是否出现崩溃。这基本上是一种单元测试,因此会相当重型。
如果你想进行基本检查,以查看脚本是否具有有效的语法:Krtek已经回答了这个问题。我非常确定(但不是100%),Lua 的等价物是 loadfile
或 loadstring
,而对于 C 来说,则是尝试使用 lua_load()
加载代码,其中每个都将可读脚本转换为字节码,你在实际使用时必须执行代码才能执行该代码。 (如果其中包含函数定义,这些函数将需要稍后执行,以便其中的代码能够执行。)
但是,在实际发生错误之前预防错误的选项就是这些。Lua 是一种非常动态的语言,其伟大优点也使其成为证明正确性的弱点。涉及到的变量太多,以至于没有完美的解决方案。
一般来说, Lua 是一种动态语言,大部分错误发生在运行时,因此通常无法检查语法错误。
如果您想检查语法错误,可以使用 luac -p
选项。例如,我会将其作为我的提交前挂钩的一部分使用。
其他常见的错误是由于误用全局变量而触发的。您可以分析 luac -l
的输出以捕获这些情况。请参见:http://lua-users.org/wiki/DetectingUndefinedVariables。
如果您想要更高级的工具,还有几个更或多或少有用的 Lua 代码静态分析工具。从 LuaInspect 开始。
无论如何,建议您编写单元测试,而不仅仅是依靠静态代码检查。更少的痛苦,更多的收益。
- 如何在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编译器。它只会将你的文件编译成字节码,而不会执行它。
如果编译了程序,它也会具有运行更快的优点。
你甚至可以使用
-p
选项仅根据链接的手册执行语法检查: