lua的代码覆盖率工具

https://github.com/esrrhs/clua​github.com

特性

  • 数据采集用C++编写,性能更高,对宿主进程影响更小
  • 简单require即可使用,或通过hookso注入
  • 解析器用go编写,通过解析lua语法,精确计算文件及函数的覆盖率
  • 支持输出lcov格式,进而输出html结果

编译

  • 编译libclua.so
# cmake .
# make

  • 编译clua解析工具
# go get "github.com/milochristiansen/lua"
# 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
123456b) 加载libclua.so
# ./hookso dlopen $PID ./libclua.soc) 执行libclua.so的start_cov手动开启,等价于start_cov(L, "./test.cov", 5)
# ./hookso call $PID libclua.so start_cov i=123456 s="./test.cov" i=5c) 执行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

  • 查看结果,每行前面的数字表示执行的次数,空表示没被执行,方便定位潜在bug。最后几行显示了总体覆盖率,以及每个函数的覆盖率
# ./clua -i test.cov
total points = 27, 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)elseprint("b "..i)end
11  end1   function test2(i)
40      if i > 30 then
19          print("c "..i)else
21          print("d "..i)end
41  end1   function test3(i)51      if i > 0 then
51          print("e "..i)elseprint("f "..i)end52  endtest4 = function(i)local function test5(i)
12          print("g "..i)
15      end15      for i = 0, 3 do
12          test5(i)end4   end102 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)endend4   for i = 0, 2 do
3       test4(i)end1   cl.stop()/home/project/clua/test.lua total coverage 78% 22/28
/home/project/clua/test.lua function coverage [function test1(i)] 66% 2/3
/home/project/clua/test.lua function coverage [function test2(i)] 100% 3/3
/home/project/clua/test.lua function coverage [function test3(i)] 66% 2/3
/home/project/clua/test.lua function coverage [test4 = function(i)] 75% 3/4
/home/project/clua/test.lua function coverage [local function test5(i)] 100% 1/1

  • 也用lcov查看
# ./clua -i test.cov -lcov test.info

  • 此时目录下已有test.info文件,然后用lcov的工具输出html
# genhtml test.info

  • 打开目录下的index.html如下
  • 点击进入test.lua
  • lcov还可以对info文件进行合并,更多操作参考官方文档

其他

lua的性能分析工具pLua

lua代码格式化工具_lua的代码覆盖率工具相关推荐

  1. lua代码格式化工具_FFLUA——C++嵌入Luaamp;扩展Lua利器

    摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一.Lua的轻量.小巧.概念之简单,都使他变得越来越受欢迎.本人也使用过python做嵌入式脚本,二者各有特点,关 ...

  2. python格式化代码工具_python 代码格式化工具:YAPF

    背景 现在的大多数 Python 代码格式化工具(比如:autopep8 和 pep8ify)是可以移除代码中的 lint 错误.这显然有些局限性.比如:遵循 PEP 8 指导的代码可能就不会被格式化 ...

  3. 工具 每分钟_black: 一个不妥协的Python代码格式化工具

    代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 "WFT" 定律,即每分钟爆出 "WTF" 的次数.你在读别人代码或者做 ...

  4. 工具及方法 - 在Source Insight中使用代码格式化工具

    在Source Insight 4.0中,有代码格式化工具: 当你打开某个源文件后,可以对当前文件进行格式修改: 有ANSI.GNU.K&R三种编码风格可以选择. 也可以自己进行设置: 同时, ...

  5. 推荐一个小而美的Python代码格式化工具

    代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 "WFT" 定律,即每分钟爆出 "WTF" 的次数.你在读别人代码或者做 ...

  6. 编写高性能的 Lua 代码

    原文出处: wuzhiwei 的博客   欢迎分享原创到伯乐头条 前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件,手机游戏<大掌门& ...

  7. Prettier 1.15代码格式化工具新增Angular和Vue.js支持

    Prettier 1.15代码格式化工具新增HTML.Vue.js.Angular.MDX支持以及多项语法优化和改进. 对于Angular和Vue,Prettier现在可以格式化这些扩展HTML的框架 ...

  8. 代码覆盖率工具 Istanbul 入门教程

    测试的时候,我们常常关心,是否所有代码都测试到了. 这个指标就叫做"代码覆盖率"(code coverage).它有四个测量维度. 行覆盖率(line coverage):是否每一 ...

  9. php代码格式化工具 php-cs-fixer的使用

    为什么80%的码农都做不了架构师?>>>    php-cs-fixer简介 php-cs-fixer 是个代码格式化工具,格式化的标准是 PSR-1.PSR-2 以及一些 symf ...

最新文章

  1. Elasticsearch官档翻译——2 2 在Linux上启动服务
  2. Linux复习资料(二)、Linux基本操作
  3. JS:a=b=c,a=?
  4. WPF 透明窗口在桌面上放虫子。。。
  5. Nodejs中cluster模块的多进程共享数据问题
  6. c++之友元函数和友元类
  7. 标题组合-标题组合软件-免费标题生成组合软件
  8. java 调用 easypr_Java程序执行Linux命令调用EasyPR程序识别车牌号
  9. 【python】入门oj
  10. 中国网络安全企业50强
  11. 机器视觉培训教程-如何选择合适的灯源
  12. Pr 音频效果参考:立体声声像、时间与变调
  13. 电脑各种故障排除集锦
  14. vue_elementui拖住滑块拼图验证代码
  15. HTML页面添加背景音乐
  16. spring data redis 配置
  17. 计算机病毒作文300,我vs电脑的作文300字
  18. 智慧城市升级版已来 | 城市大脑建设标准十大原则
  19. 使用nginx搭建http代理服务器
  20. 如何构建一个高效且可伸缩的缓存

热门文章

  1. Spring MVC 反射对象和依赖注入
  2. uva 550 有趣的乘法(dfs)
  3. Ubuntu 下 libev编译安装
  4. 高性能分布式锁-redisson
  5. 牛客第三场多校 H Diff-prime Pairs
  6. 洛谷——P2820 局域网
  7. Perl命令行常见用法及技巧
  8. Java面向对象-抽象类
  9. Ubuntu14.04下配置固定IP
  10. android - Drawable - ColorDrawable 学习笔记