1.安装到usr/local下
git clone https://github.com/linux-test-project/lcov.git
cd lcov
sudo make install
直接在主目录make。
2. 简易使用
2.1 在待测试覆盖率的项目CmakeLists.txt链接lcov:
添加
set(CMAKE_CXX_FLAGS "-g -O0 -Wall -fprofile-arcs -ftest-coverage")
或
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -fopenmp")
add_compile_options(-fprofile-arcs)
add_compile_options(-ftest-coverage)
add_compile_options(--coverage)
link_libraries(gcov)
2.2 待测试覆盖率的项目重新编译运行
2.3 跳转到项目的所在文件夹的上一级目录
例如项目MDataHub的路径为在home/type/MDataHub,那么跳转到/home/ros
2.4 清空计数器
lcov --directory MDataHub --zerocounters
显示:
Deleting all .da files in MDataHub and subdirectories
Done.
2.5 运行项目
假设有多个可执行文件,随便执行一个即可。
2.6 捕获每个文件的覆盖率到文件app.info:(MDataHub为文件夹名)
lcov --directory MDataHub --capture --output-file app.info
显示:
Capturing coverage data from MDataHub
Found gcov version: 5.4.0
Using intermediate gcov format
Scanning MDataHub for .gcda files ...
Found 6 data files in MDataHub
Processing thirdparty/mtime/CMakeFiles/mtime.dir/core/src/struct.cpp.gcda
Processing thirdparty/mtime/CMakeFiles/mtime.dir/core/src/utils.cpp.gcda
Processing thirdparty/mtime/CMakeFiles/mtime.dir/core/src/mtime.cpp.gcda
Processing CMakeFiles/sample_maf.dir/sample/src/maf_manager.cpp.gcda
Processing CMakeFiles/sample_maf.dir/sample/src/sample_maf.cpp.gcda
Processing CMakeFiles/sample_maf.dir/src/mdata_hub.cpp.gcda
Finished .info-file creation
2.7 由app.info生成html:
genhtml app.info
显示:
Found 66 entries.
Found common filename prefix "/usr/include/c++"
Writing .css and .png files.
Generating output.
Processing file /home/type/MDataHub/include/mdatabase.h
...
Processing file 5/mutex
Processing file 5/cmath
Processing file 5/functional
Processing file 5/new
Processing file 5/chrono
Processing file 5/initializer_list
Processing file 5/tuple
Processing file 5/thread
Processing file 5/typeinfo
Processing file 5/type_traits
Processing file 5/bits/stl_uninitialized.h
Processing file 5/bits/stl_pair.h
Processing file 5/bits/basic_string.h
Processing file 5/bits/shared_ptr.h
Processing file 5/bits/alloc_traits.h
Processing file 5/bits/stl_construct.h
Processing file 5/bits/stl_vector.h
Processing file 5/bits/move.h
Processing file 5/bits/unique_ptr.h
Processing file 5/bits/shared_ptr_base.h
Processing file 5/bits/vector.tcc
Processing file 5/bits/stl_iterator_base_funcs.h
Processing file 5/bits/stl_tree.h
Processing file 5/bits/deque.tcc
Processing file 5/bits/stl_algobase.h
Processing file 5/bits/ios_base.h
Processing file 5/bits/stl_iterator_base_types.h
Processing file 5/bits/stl_map.h
Processing file 5/bits/stl_function.h
Processing file 5/bits/basic_string.tcc
Processing file 5/bits/stl_iterator.h
Processing file 5/bits/stl_deque.h
Processing file 5/bits/allocator.h
Processing file 5/bits/allocated_ptr.h
Processing file 5/ext/new_allocator.h
Processing file 5/ext/aligned_buffer.h
Processing file 5/ext/string_conversions.h
Processing file 5/ext/atomicity.h
Processing file 5/ext/alloc_traits.h
Processing file 5/ext/type_traits.h
Processing file /usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h
Writing directory view page.
Overall coverage rate:
lines......: 65.0% (1624 of 2500 lines)
functions..: 61.0% (1555 of 2548 functions)
2.8 打开index.html:
点击directory栏链接即可显示每个文件的每行代码的覆盖率,每行中蓝色背景代表覆盖到,红色背景代表没有覆盖到。
3 lcov参数
- -d 项目路径,即.gcda .gcno所在的路径
- -a 合并(归并)多个lcov生成的info文件
- -c 捕获,也即收集代码运行后所产生的统计计数信息
- --external 捕获其它目录产生的统计计数文件
- -i/--initial 初始化所有的覆盖率信息,作为基准数据
- -o 生成处理后的文件
- -r/--remove 移除不需要关注的覆盖率信息文件
- -z 重置所有执行程序所产生的统计信息为0
必需要通过执行项目本身的可执行文件,如sample等,像roslaunch等通过开启结点不能生成对应的覆盖率文件!