skynet lua 代碼靜態分析
來源:程序員人生 發布時間:2016-12-02 09:25:24 閱讀次數:4626次
skynet是1款為多人在線游戲設計的服務端框架,使用C+Lua開發。skynet這套框架的1個優點是,通常只需要寫lua代碼,很少用到c做開發,1定程度上提高了開發效力。而skynet文檔相對較少,所以這里利用1點時間學習和總結skynet相干內容,文章就講授下skynet lua代碼靜態分析。
skynet項目大部份代碼應當是lua代碼,而這部份代碼,在skynet啟動前不需要手動編譯,直接啟動skynet就能夠跑起來。也就是說,對lua代碼,skynet沒有提供編譯工具,其實也沒有必要提供。
但是,這對開發來講,有時候卻很不友好,由于lua代碼需要等skynet跑起來且履行到才知道是不是有毛病。
所以,這里講授如何對skynet lua項目進行代碼靜態分析,在開發的時候盡早發現問題。固然,文章除適用skynet項目,還適用其他使用lua的項目。
lua項目代碼靜態分析的方法有兩個:
1、使用lua編譯器(luac)進行分析
2、使用luacheck插件進行分析
第1種方法,利用lua編譯器對lua代碼進行語法檢查。這類方法簡單有效,具體方法我在之前的文章介紹過,有興趣點這里瀏覽。skynet項目lua代碼簡單加密 -- 沒有開花的樹 csdn
第2種方法,使用Luacheck對lua代碼進行分析。這類方法是我比較推薦的,luacheck是個優秀的第3方插件,代碼是MIT開源的,有興趣點這里圍觀。Luacheck Git
Lua分析器(Luacheck)
Luacheck介紹
Luacheck是Lua1個靜態分析工具,與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] | [--no-config]) [-g] [-u] [-r]
[-a] [-s] [--no-self] [--std] [-c] [-d] [-t] [-m]
[--no-inline] [--filename] [-j]
[--formatter] [-q] [--codes] [--ranges]
[--no-color] [-v] [-h][] ...
[--globals [] ...] [--read-globals [] ...]
[--new-globals [] ...]
[--new-read-globals [] ...]
[--ignore[] ...] [--enable[] ...]
[--only[] ...]
[--exclude-files[] ...]
[--include-files[] ...]
這里重點介紹以下幾個參數:
--no-unused
|
疏忽變量未使用
|
--no-unused-args
|
疏忽參數未使用
|
--no-redefined
|
疏忽變量重定義
|
--globals...
|
疏忽哪些全局變量
|
--ignore...
|
疏忽哪些毛病提示
|
--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分別代表甚么,怎樣得到的,看這里。
怎樣得到1個毛病的編號?
# 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就是疏忽這個毛病提示。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈