cLua 0.1发布,Lua 的代码覆盖率工具

栏目: 软件资讯 · 发布时间: 4年前

内容简介:cLua lua的代码覆盖率工具 特性 C++开发,性能更高,对宿主进程影响更小 简单require即可使用,或通过hookso注入 独立的命令行解析工具 编译 编译libclua.so # cmake . # make 编译clua解析工具 # go bui...

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之类的影响,所以并不完全精确)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

设计之下

设计之下

搜狐新闻客户端UED团队 / 电子工业出版社 / 2014-1-1 / CNY 69.00

形而上者谓之道,形而下者谓之器。匠者,器也。处身平凡的匠人不断追求向上的设计之道。本书没有华丽的辞藻和长篇大论的理论,作者是搜狐一线的设计团队,写作过程中他们尽力还原真实的工作场景,并总结出了一些实用的经验和方法。 《设计之下》共三部分,全面讲解了用户体验设计的流程和方法。第一部分为“交互设计”,阐述了从项目启动、解析需求到原型设计的过程,并且总结了交互设计的要点:大局观、操作流程简捷、形式......一起来看看 《设计之下》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具