首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lua脚本错误检查

lua脚本错误检查
EN

Stack Overflow用户
提问于 2011-03-10 01:28:30
回答 3查看 13.6K关注 0票数 9

有没有可能在不执行lua脚本的情况下检查它是否包含错误?我有休眠代码:

代码语言:javascript
复制
    if(luaL_loadbuffer(L, data, size, name))
    {
        fprintf (stderr, "%s", lua_tostring (L, -1));
        lua_pop (L, 1);
    }

    if(lua_pcall(L, 0, 0, 0))
    {
        fprintf (stderr, "%s", lua_tostring (L, -1));
        lua_pop (L, 1);
    }

但是,如果脚本包含错误,它会首先传递if,然后执行。我想知道当我加载它的时候,它是否包含错误,而不是当我执行它的时候。这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-10 04:48:52

(这原本是对Krtek问题的第一个评论的回复,但我的空间已经用完了,老实说,这是一个很好的答案。)

函数本质上是值,因此命名函数实际上是该名称的变量。变量,根据它们的定义,可以随着脚本的执行而改变。见鬼,可能会有人意外地重新定义其中的一个函数。这是不是很糟糕?总结一下我的想法:根据脚本、传递的参数和/或你所说的那些预定义函数的实际实现(例如,一个人可能取消自身或其他人的设置),除非你愿意缩小一些要求的范围,否则不可能保证事情的正常进行。Lua对于你正在寻找的东西来说太动态了。:)

如果你想要一个完美的测试:创建一个虚拟环境,把所有的功能都放在适当的地方,看看它是否会在测试过程中的任何地方崩溃(加载、执行等)。这基本上是一种单元测试,因此会相当繁重。

如果你想要一个基本检查,看看一个脚本是否有一个有效的语法:Krtek已经给出了答案。我非常确定(但不是100%) lua的等价物是loadfileloadstring,而相应的C等价物是尝试和lua_load()代码,其中每一个都将可读脚本转换为字节码,这是您在正常的通用用例中实际执行代码之前已经需要做的事情。(如果其中包含函数定义,则需要稍后执行这些定义,以便执行这些定义中的代码。)

然而,在实际发生错误之前,这些是您可以选择的范围。Lua是一种非常动态的语言,当你想要证明正确性时,什么是一个强大的优势也会导致一个弱点。对于一个完美的解决方案来说,涉及的变量太多了。

票数 6
EN

Stack Overflow用户

发布于 2011-03-10 01:35:50

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

如果你的程序被编译了,它的运行速度也会更快.

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

-p加载文件,但不生成任何输出文件。主要用于语法检查或测试预编译块:损坏的文件在加载时可能会生成错误。要进行粗略的完整性测试,请使用-t。

票数 10
EN

Stack Overflow用户

发布于 2011-03-18 09:51:34

一般来说,这是不可能的,因为Lua是一种动态语言,而且大多数错误都发生在运行时。

如果要检查语法错误,请使用luac -p选项。例如,我将其用作预提交钩子的一部分。

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

如果您想要更高级的东西,有几个或多或少功能强大的Lua代码静态分析工具。从LuaInspect开始。

在任何情况下,建议您编写单元测试,而不是仅仅依赖静态代码检查。少一点痛苦,多一点收获。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5249709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档