Lua脚本错误检查。

有没有可能在不执行脚本的情况下检查lua脚本中是否存在错误?我有如下代码:

    如果(luaL_loadbuffer(L,data,size,name))
    {
        fprintf(stderr,“%s”,lua_tostring(L,-1));
        lua_pop(L,1);
    }

    如果(lua_pcall(L,000))
    {
        fprintf(stderr,“%s”,lua_tostring(L,-1));
        lua_pop(L,1);
    }

但是如果脚本包含错误,则通过第一个if,脚本将被执行。我想知道它是否在加载时包含错误,而不是在执行时。这可行吗?

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

点赞
stackoverflow用户633281
stackoverflow用户633281

你可以使用LUA编译器。它只会将你的文件编译成字节码,而不会执行它。

如果编译了程序,它也会具有运行更快的优点。

你甚至可以使用-p选项仅根据链接的手册执行语法检查:

-p 加载文件但不生成任何输出文件。主要用于语法检查或测试预编译块:如果加载时出现错误,可能会生成错误。对于彻底的完整性测试,请使用-t

2011-03-09 17:35:49
stackoverflow用户207504
stackoverflow用户207504

函数本质上是值,因此命名函数实际上就是该名称的变量。变量根据其定义,可以在脚本执行时更改。反正某个人可能会不小心重新定义其中一个函数。总的来说,根据你所说的预定义函数的参数传递和/或实际实现(例如,其中一个可取消设置本身或其他函数),如果你不愿缩小一些需求,那就无法保证事情能够正常工作。Lua 对于你所寻找的并不适合。 :)

如果你想要无瑕疵测试:创建一个虚拟环境,将所有必要的东西放在那里,然后查看在整个过程中(加载、执行等)是否出现崩溃。这基本上是一种单元测试,因此会相当重型。

如果你想进行基本检查,以查看脚本是否具有有效的语法:Krtek已经回答了这个问题。我非常确定(但不是100%),Lua 的等价物是 loadfileloadstring,而对于 C 来说,则是尝试使用 lua_load() 加载代码,其中每个都将可读脚本转换为字节码,你在实际使用时必须执行代码才能执行该代码。 (如果其中包含函数定义,这些函数将需要稍后执行,以便其中的代码能够执行。)

但是,在实际发生错误之前预防错误的选项就是这些。Lua 是一种非常动态的语言,其伟大优点也使其成为证明正确性的弱点。涉及到的变量太多,以至于没有完美的解决方案。

2011-03-09 20:48:52
stackoverflow用户6236
stackoverflow用户6236

一般来说, Lua 是一种动态语言,大部分错误发生在运行时,因此通常无法检查语法错误。

如果您想检查语法错误,可以使用 luac -p 选项。例如,我会将其作为我的提交前挂钩的一部分使用。

其他常见的错误是由于误用全局变量而触发的。您可以分析 luac -l 的输出以捕获这些情况。请参见:http://lua-users.org/wiki/DetectingUndefinedVariables

如果您想要更高级的工具,还有几个更或多或少有用的 Lua 代码静态分析工具。从 LuaInspect 开始。

无论如何,建议您编写单元测试,而不仅仅是依靠静态代码检查。更少的痛苦,更多的收益。

2011-03-18 01:51:33