cLua 0.1发布,Lua 的代码覆盖率工具
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之类的影响,所以并不完全精确)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Verge3D 3.2 for Maya 发布
发布时间:2020年6月24日 英文版:https://www.soft8soft.com/verge3d-3-2-for-maya-released/ Verge3D for Maya的最新版本已经发布。在3.2版中,我们实现了基于节点的材质!升级了实时阴影,添加并改进了一些拼图,例如视频静音/取消静音,选择活动摄影机;为性能工具增加了功能;在更新应用时启用了自动合并和备份HTML/CSS/JS文件;进一步扩展了用户手册,并做了许多其他功能和稳定性改进。您可以在以下阅读了解这此改进的全部内容。 节点材质 我们启动了节点材质的实现,这些材质可以与之前介绍过的符合glTF的着色器一起使用。目的是允许设计师创建任意复杂的自定义材质,类似于Blender和3ds Max版本那样。 在此版本中,我们支持了近二十个节点,包括aiStandardSurface,StandardSurface,file,place2dTexture,shadingEngine,bump2d,aiFlat,Ramp,Sampler Info,Surface Shader,Lambert,aiMixShader,...
-
下一篇
大道至简 spring-data-mybatis-mini 2.3.4 发布
更新日志: 增加流读方法及其说明 批量建议自定义实现 [github地址](https://github.com/VonChange/spring-data-mybatis-mini) [gitee地址](https://gitee.com/vonchange/spring-data-mybatis-mini) [blog](http://www.vonchange.com/doc/mini.html) >> 具体更新说明文档 批量更新插入 jdbc链接参数需加入rewriteBatchedStatements=true&allowMultiQueries=true 提供insertBatch(默认第一行不为NULL的字段) 可在markdown里自定义sql 无需关心List对象大小 经测试简单数据插入1万耗时1s以内(mysql5.7) 自定义实现(建议使用 更透明) @BatchUpdate(size = 5000) int batchInsert(List<UserBaseDO> list); 只需定义单条insert 语句 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装