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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音