歡迎您光臨本站 註冊首頁

cLua 0.1釋出,Lua 的程式碼覆蓋率工具

←手機掃碼閱讀     admin @ 2020-07-04 , reply:0

cLua

lua的程式碼覆蓋率工具

特性

  • C++開發,效能更高,對宿主程序影響更小
  • 簡單require即可使用,或通過hookso注入
  • 獨立的命令列解析工具

編譯

  • 編譯libclua.so

 # cmake .
 # make
 
  • 編譯clua解析工具

 # go build clua.go
 

使用

  • 直接嵌入lua指令碼中使用,lua檔案裡使用如下

 -- 載入libclua.so
 local cl = require "libclua"
 -- 開始記錄執行過程,生成結果檔案
 -- 第一個引數為結果檔案的檔名
 -- 第二個引數為定時生成結果檔案的間隔(秒),0表示關閉
 cl.start("test.cov", 5)
 
 -- 執行某些事情
 do_something()
 
 -- 結束記錄
 cl.stop()
 
  • 或者使用hookso注入到程序中(假設程序id為PID),手動開啟

 a) 首先獲取程序中的Lua_State指標,比如程序呼叫了lua_settop(L)函式,那麼就取第一個引數
 # ./hookso arg $PID liblua.so lua_settop 1 
 123456
 
 b) 載入libclua.so
 # ./hookso dlopen $PID ./libclua.so
 
 c) 執行libclua.so的start_cov手動開啟,等價於start_cov(L, "./test.cov", 5)
 # ./hookso call $PID libclua.so start_cov i=123456 s="./test.cov" i=5
 
 c) 執行libclua.so的stop_cov手動關閉,等價於stop_cov(L)
 # ./hookso call $PID libclua.so stop_cov i=123456
 
  • 執行完上述兩種方法的任一一種,用clua解析test.cov檢視結果。clua更多引數參考-h

 # ./clua -i test.cov
 

示例

  • 執行test.lua

 # lua5.3 ./test.lua
 
  • 檢視目錄下,已有test.cov檔案

 # ll test.cov
 
  • 檢視結果,每行前面的數字表示執行的次數,空表示沒被執行

 # ./clua -i test.cov     
 total points = 20, files = 1
 coverage of /home/project/clua/test.lua:
     local cl = require "libclua"
     cl.start("test.cov", 5)
     
 1   function test1(i)
 10      if i % 2 then
 10          print("a "..i)
         else
             print("b "..i)
         end
 11  end
     
 1   function test2(i)
 40      if i > 30 then
 19          print("c "..i)
         else
 21          print("d "..i)
         end
 41  end
     
 1   function test3(i)
     
 51      if i > 0 then
 51          print("e "..i)
         else
             print("f "..i)
         end
     
 52  end
     
 102 for i = 0, 100 do
 101     if i < 10 then
 10          test1(i)
 91      elseif i < 50 then
 40          test2(i)
         else
 51          test3(i)
         end
     end
     
 1   cl.stop()
 
 /home/project/clua/test.lua total coverage 60%
 
  • 在結果中,可以看到每一行的執行次數,方便定位潛在bug
  • 最後一行會輸出文件的總體覆蓋率(注:因為有else、end之類的影響,所以並不完全精確)

[admin ]

來源:OsChina
連結:https://www.oschina.net/news/116928/clua-0-1-released
cLua 0.1釋出,Lua 的程式碼覆蓋率工具已經有113次圍觀

http://coctec.com/news/all/show-post-241000.html