skynet lua 代码静态分析
2016-09-19 21:50
1041 查看
skynet是一款为多人在线游戏设计的服务端框架,使用C+Lua开发。skynet这套框架的一个优点是,通常只需要写lua代码,很少用到c做开发,一定程度上提高了开发效率。而skynet文档相对较少,所以这里利用一点时间学习和总结skynet相关内容,文章就讲解下skynet lua代码静态分析。
skynet项目大部分代码应该是lua代码,而这部分代码,在skynet启动前不需要手动编译,直接启动skynet就可以跑起来。也就是说,对于lua代码,skynet没有提供编译工具,其实也没有必要提供。
但是,这对开发来说,有时候却很不友好,因为lua代码需要等skynet跑起来且执行到才知道是否有错误。
所以,这里讲解如何对skynet lua项目进行代码静态分析,在开发的时候尽早发现问题。当然,文章除了适用skynet项目,还适用其他使用lua的项目。
lua项目代码静态分析的方法有两个:1、使用lua编译器(luac)进行分析2、使用luacheck插件进行分析
第一种方法,利用lua编译器对lua代码进行语法检查。这种方法简单有效,具体方法我在以前的文章介绍过,有兴趣点这里阅读。skynet项目lua代码简单加密 -- 没有开花的树 csdn
第二种方法,使用Luacheck对lua代码进行分析。这种方法是我比较推荐的,luacheck是个优秀的第三方插件,代码是MIT开源的,有兴趣点这里围观。Luacheck Git
如果想检查整个项目的lua代码,方法如下:
这里重点介绍以下几个参数:
以例子说明前面几个参数吧。
解释以上,个别参数分别代表什么意思?--globals table string 忽略全局变量table、string的声明和使用--ignore 542 512 忽略编号为542、512的错误
至于 542 512分别代表什么,怎么得到的,看这里。怎么得到一个错误的编号?
参考:http://blog.csdn.net/mycwq/article/details/52589415
skynet项目大部分代码应该是lua代码,而这部分代码,在skynet启动前不需要手动编译,直接启动skynet就可以跑起来。也就是说,对于lua代码,skynet没有提供编译工具,其实也没有必要提供。
但是,这对开发来说,有时候却很不友好,因为lua代码需要等skynet跑起来且执行到才知道是否有错误。
所以,这里讲解如何对skynet lua项目进行代码静态分析,在开发的时候尽早发现问题。当然,文章除了适用skynet项目,还适用其他使用lua的项目。
lua项目代码静态分析的方法有两个:1、使用lua编译器(luac)进行分析2、使用luacheck插件进行分析
第一种方法,利用lua编译器对lua代码进行语法检查。这种方法简单有效,具体方法我在以前的文章介绍过,有兴趣点这里阅读。skynet项目lua代码简单加密 -- 没有开花的树 csdn
第二种方法,使用Luacheck对lua代码进行分析。这种方法是我比较推荐的,luacheck是个优秀的第三方插件,代码是MIT开源的,有兴趣点这里围观。Luacheck Git
Lua分析器(Luacheck)
Luacheck介绍
Luacheck是Lua一个静态分析工具,与Lua语言编译器相比,Luacheck可以对lua程序进行更加严格的错误分析。它不但可以检查出lua语法问题,而且可以检查那些完全合乎语法但却很可能是错误的代码。换句话说,Luacheck能检查到lua程序中潜在的错误,如未定义的变量使用,未使用的变量和值,未定义的全局变量使用,执行不到的代码等等Luacheck安装与使用
安装:# git clone https://github.com/mpeterv/luacheck.git # cd luacheck # ./install.lua /usr使用:
# luacheck ./install.lua Checking install.lua OK Total: 0 warnings / 0 errors in 1 file注意了,luacheck依赖lua,使用请确保lua已安装
如果想检查整个项目的lua代码,方法如下:
#!/bin/bash Luas=`find . -name "*.lua"` if [ "$Luas" != "" ]; then luacheck $Luas fi保存为 test.sh,执行,大致效果如下:
# chmod +x ./test.sh # ./test.sh Checking bin/luacheck.lua OK Checking spec/check_spec.lua OK Checking spec/lexer_spec.lua OK Checking spec/cache_spec.lua OK Checking spec/globbing_spec.lua OK Checking spec/config_spec.lua OK ... Total: 0 warnings / 0 errors in 42 files
Luacheck参数说明
Luacheck值得推荐的地方,除了能查找lua错误,更重要的是,它可以自定义捕捉的错误类型。可能有些写法我们不认为是错的,就可以避免显示出来。# luacheck --help Usage: luacheck ([--config <config>] | [--no-config]) [-g] [-u] [-r] [-a] [-s] [--no-self] [--std <std>] [-c] [-d] [-t] [-m] [--no-inline] [--filename <filename>] [-j <jobs>] [--formatter <formatter>] [-q] [--codes] [--ranges] [--no-color] [-v] [-h] <file> [<file>] ... [--globals [<global>] ...] [--read-globals [<global>] ...] [--new-globals [<global>] ...] [--new-read-globals [<global>] ...] [--ignore <patt> [<patt>] ...] [--enable <patt> [<patt>] ...] [--only <patt> [<patt>] ...] [--exclude-files <glob> [<glob>] ...] [--include-files <glob> [<glob>] ...]
这里重点介绍以下几个参数:
--no-unused | 忽略变量未使用 |
--no-unused-args | 忽略参数未使用 |
--no-redefined | 忽略变量重定义 |
--globals <global> ... | 忽略哪些全局变量 |
--ignore <patt> ... | 忽略哪些错误提示 |
--quiet | 只显示有错误的文件提示 |
--codes | 显示错误编号 |
Luacheck示例
以例子说明前面几个参数吧。# luacheck $Luas --no-unused --quiet --no-unused-args --no-redefined --no-color --globals table string --ignore 542 512 Total: 0 warnings / 0 errors in 42 files
解释以上,个别参数分别代表什么意思?--globals table string 忽略全局变量table、string的声明和使用--ignore 542 512 忽略编号为542、512的错误
至于 542 512分别代表什么,怎么得到的,看这里。怎么得到一个错误的编号?
# cat ./test.lua local t={} for k,v in pairs(t) do return k,v end # luacheck ./test.lua --codes Checking test.lua 1 warning test.lua:2:1: (W512) loop is executed at most once Total: 1 warning / 0 errors in 1 file以上,512就是这个错误的编号,所以 --ignore 512就是忽略这个错误提示。
参考:http://blog.csdn.net/mycwq/article/details/52589415
相关文章推荐
- 代码静态分析工具PC-LINT安装配置【转】
- SourceInsight与PC-LINT集成进行代码静态分析
- php 静态 代码 分析 工具
- 代码静态分析工具PC-LINT安装配置
- 浅淡静态代码分析工具
- C++代码静态分析工具-Prefast
- 用PMD自动执行Java代码静态分析
- 静态代码分析之函数的调用序列
- [hyddd安全性测试笔记2]浅淡静态代码分析工具
- 交接工作不要只分析流程和看静态的看代码呀,一定要动手,增加一个功能,解决一个 BUG什么的,才能真正理解交接的工作内容呀!
- 代码静态分析工具PC-LINT安装配置--step by step
- 代码静态分析工具PC-LINT安装配置--step by step[转]
- 代码静态分析工具PC-LINT安装配置
- 代码静态分析工具PC-LINT安装配置
- C++代码静态分析工具-Prefast 和 Fxcop
- 代码静态分析工具PC-LINT安装配置
- 代码静态分析工具PC-LINT安装配置
- 在 Rational Application Developer V7.0 中使用代码复查 (Code Review) 的静态分析特性
- C++代码静态分析工具
- 安全编码实践三:C/C++静态代码分析工具Prefast