栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

使用gcc/g++的--coverage查看代码的覆盖测试(使用VSCode)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用gcc/g++的--coverage查看代码的覆盖测试(使用VSCode)

gcc/g++在9.0版本后提供了一个编译链接选项–coverage选项,可用来查看代码的覆盖测试情况,即查看代码中哪些部分已经被测试了或者没有被测试,其简单描述如下,

This option is used to compile and link code instrumented for coverage analysis. The option is a synonym for -fprofile-arcs -ftest-coverage (when compiling) and -lgcov (when linking).

详细可查看这里。

例如一个类里定义了几个方法,测试完后可以查看哪些方法被测过了,哪些方法没有被测试过。

本文基于VSCode来讲述如何操作,使用远程连接,远程sever是Ubuntu 21.04 (虚拟机),gcc版本是10.3.0


一 Remote SSH设置

请参考这篇文章


二 安装gcov扩展

远程连接好虚拟机后,在VSCode的扩展里搜索gcov,会出现Gcov Viewer,点击进去安装,

PS:这个扩展是有图标的,不知为啥我这里显示不出来…

注意这个扩展是安装在远程server上的,安装完毕后如下,

可以自行查看其描述内容。


三 测试

我们建立一个工程,如下,

MyClass.h如下,

#ifndef __MY_CLASS_H__
#define __MY_CLASS_H__

class MyClass
{
public:
    void func1(void);

    void func2(void);
    
    void func3(void);
};

#endif

MyClass.cpp如下,

#include 

#include "MyClass.h"


void MyClass::func1(void)
{
    std::cout << "This is func1()n";
}

void MyClass::func2(void)
{
    std::cout << "This is func2()n";
}

void MyClass::func3(void)
{
    std::cout << "This is func3()n";
}

main.cpp如下,

#include "MyClass.h"


int main(void)
{
    MyClass obj;
    obj.func1();

    return 0;
}

可以看出MyClass类里定义了三个方法,但是main.cpp里只调用了一个方法func1,另外2个方法没有覆盖到。

CMakeLists.txt如下,注意不能开启优化选项,

cmake_minimum_required(VERSION 3.5)


project(demo)

add_compile_options(--coverage)

add_link_options(--coverage)


add_executable(main src/main.cpp src/MyClass.cpp)

然后我们cd到build目录,执行下面命令,

cmake .. && make

成功后执行main,

./main

此时在vscode里按Ctrl+shif+p调出命令选项,输入gcov,然后选择Gcov Viewer: Show,

此时再去查看代码,可以发现已经被测过的代码会被绿标,

如果想关闭绿标,可以选择Gcov Viewer: Hide来关闭,非常方便


四 总结

本文基于VSCode的扩展gcov viewer来查看代码的覆盖测试情况,对于测试来说很有用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号