lua 的代码覆盖率工具 cLua

MIT
C/C++ Google Go Lua
跨平台
2020-07-02
shfuitck

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之类的影响,所以并不完全精确)
的码云指数为
超过 的项目
加载中
请先登录后再评论。

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

cLua 是 lua 的代码覆盖率工具. 该版本更新内容包括: 增加输出lcov info的支持,进而可生成html格式的图形展示

07/22 16:48

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

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

07/04 19:07

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

linux下一个简单的go通过c调lua的例子

首先需要自己现在linux下配置好go和lua环境 clua.lua function add(x,y)        return x + y end glua.go package main /* #cgo pkg-config: lua5.1 #cgo luaa LDFLAGS: -...

2015/12/31 10:36
136
0
c和lua互调

什么样类型的函数可以被Lua调用 typedef int (*lua_CFunction) (lua_State *L); 符合类型的函数怎样处理后才可以被Lua调用 使用lua_register或者 lua_pushfunction和lua_setglobal()把要...

2015/12/24 14:02
331
0
Linux CentOS 编译LUA。。搞半天终于对了= =

安装 wget http://www.lua.org/ftp/lua-5.2.1.tar.gz tar -zvxf lua-5.2.1.tar.gz make linux 错误:gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX -c -o lua.o lua.clua.c:67:31: error:...

2015/12/25 09:52
3.1K
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部