<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          cLualua 的代碼覆蓋率工具

          聯(lián)合創(chuàng)作 · 2023-10-02 02:45

          cLua 是一個(gè) lua 的代碼覆蓋率工具。

          特性

          • C++開(kāi)發(fā),性能更高,對(duì)宿主進(jìn)程影響更小
          • 簡(jiǎn)單require即可使用,或通過(guò)hookso注入
          • 獨(dú)立的命令行解析工具

          編譯

          • 編譯libclua.so
          # cmake .
          # make
          
          • 編譯clua解析工具
          # go build clua.go
          

          使用

          • 直接嵌入lua腳本中使用,lua文件里使用如下
          -- 加載libclua.so
          local cl = require "libclua"
          -- 開(kāi)始記錄執(zhí)行過(guò)程,生成結(jié)果文件
          -- 第一個(gè)參數(shù)為結(jié)果文件的文件名
          -- 第二個(gè)參數(shù)為定時(shí)生成結(jié)果文件的間隔(秒),0表示關(guān)閉
          cl.start("test.cov", 5)
          
          -- 執(zhí)行某些事情
          do_something()
          
          -- 結(jié)束記錄
          cl.stop()
          
          • 或者使用hookso注入到進(jìn)程中(假設(shè)進(jìn)程id為PID),手動(dòng)開(kāi)啟
          a) 首先獲取進(jìn)程中的Lua_State指針,比如進(jìn)程調(diào)用了lua_settop(L)函數(shù),那么就取第一個(gè)參數(shù)
          # ./hookso arg $PID liblua.so lua_settop 1 
          123456
          
          b) 加載libclua.so
          # ./hookso dlopen $PID ./libclua.so
          
          c) 執(zhí)行l(wèi)ibclua.so的start_cov手動(dòng)開(kāi)啟,等價(jià)于start_cov(L, "./test.cov", 5)
          # ./hookso call $PID libclua.so start_cov i=123456 s="./test.cov" i=5
          
          c) 執(zhí)行l(wèi)ibclua.so的stop_cov手動(dòng)關(guān)閉,等價(jià)于stop_cov(L)
          # ./hookso call $PID libclua.so stop_cov i=123456
          
          • 執(zhí)行完上述兩種方法的任一一種,用clua解析test.cov查看結(jié)果。clua更多參數(shù)參考-h
          # ./clua -i test.cov
          

          示例

          • 運(yùn)行test.lua
          # lua5.3 ./test.lua
          
          • 查看目錄下,已有test.cov文件
          # ll test.cov
          
          • 查看結(jié)果,每行前面的數(shù)字表示執(zhí)行的次數(shù),空表示沒(méi)被執(zhí)行
          # ./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%
          
          • 在結(jié)果中,可以看到每一行的執(zhí)行次數(shù),方便定位潛在bug
          • 最后一行會(huì)輸出文件的總體覆蓋率(注:因?yàn)橛衑lse、end之類的影響,所以并不完全精確)
          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产双飞视频 | 色拍拍官网 | 三级成人AV在线电影 | 人妻摸一摸日日爽一爽,免费视频 | 麻豆蜜桃成人免费视频 |