内容简介: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之类的影响,所以并不完全精确)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Design Patterns
Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99
You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!