标签: lcov

C++使用gcov和lcov问题?

我使用的是ubuntu 10.1,g ++编译器.

我试图将gcov和lcov用于我的C++项目.我设法编译gcov:

g++ -fprofile-arcs -ftest-coverage main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)

没有错误或警告消息.接下来我尝试运行gcov:

gcov main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)

还好.我也尝试运行我的程序:

./a.out
Run Code Online (Sandbox Code Playgroud)

并再次运行gcov,我的主要用户和game.cpp现在显示一些百分比.我想捕获数据,我在终端输入:

lcov --directory /home/projects/Game1/ -c -o application.info
Run Code Online (Sandbox Code Playgroud)

但它给了我这个:

Capturing coverage data from /home/projects/Game1/
geninfo: ERROR: cannot read /home/projects/Game1/!
Run Code Online (Sandbox Code Playgroud)

我在网上搜索,阅读lcov文档,我找不到答案.有人可以帮帮我吗?

另外,我也无法打开main.gcda文件.(我尝试使用文本编辑器打开,它说一些字符编码问题,非常多:UTF-8,Western(ISO-8859-1),Western(ISO-8859) -11)等,但仍然无法打开并读取文件.

请帮帮我..谁?

编辑:

我承认,这是我的错误(我非常抱歉,"home/Projects/Game1",资本为"P".)在验证路径后,我收到了这个新错误:

geninfo: ERROR: /home/Projects/Game1/main.gcno: reached unexpected end of file
Run Code Online (Sandbox Code Playgroud)

c++ gcov lcov

8
推荐指数
1
解决办法
2万
查看次数

如何从lcov代码覆盖率报告中删除某些目录?

我使用lcov和shell脚本并不是太强大,所以这对我来说是一个学习过程.我理解编写代码覆盖率报告的基础知识,但我不知道排除某些目录的代码行.在shell可执行文件中,我编写了以下代码:

    #!/bin/sh
    ROOT_DIR=$1
    DEST_DIR=$2
    TARGET_DIR=$3
    TARGET=$4

   #init lcov
   lcov -c -i -d $TARGET_DIR/.. -o $TARGET_DIR/cov_init.info

    #run unit test executable
    "$DEST_DIR/$TARGET"

     #capture coverage after running executable
     lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info

     #I added this in-generate delta of coverage
     lcov -a $TARGET_DIR/cov_init.info -a $TARGET_DIR/cov_test.info -o $TARGET_DIR/cov.info

  # I added this in- Excludes some third party code
                    lcov --remove $TARGET_DIR/cov.info '/opt/*' '/usr/*' '$ROOT_DIR/Common?ExternalLibraries/*'

  #I added this in-generate report
            genhtml $TARGET_DIR/cov.info --ignore-errors source --output-directory $DEST_DIR/CoverageReport/$TARGET
            xdg-open $DEST_DIR/CoverageReport/$TARGET/index.html &
Run Code Online (Sandbox Code Playgroud)

我很确定在运行可执行文件后捕获coverage之前我需要排除目录.

bash shell lcov

8
推荐指数
1
解决办法
9513
查看次数

将 --no-external 标志添加到 lcov 命令后,genhtml 不生成覆盖率报告

我想从我的覆盖率报告中排除外部库的代码,所以我在 lcov 命令中添加了 --no-external 标志。不幸的是,添加此标志后 genhtml 无法生成覆盖率报告。

使用的命令:

lcov --directory 。-c -o coverage.info -t "coverage_result" --no-external

结果:

genhtml: 错误: 在跟踪文件coverage.info 中找不到有效记录

此外,coverage.info 文件看起来已损坏:

TN:coverage_result
TN:coverage_result
TN:coverage_result
TN:coverage_result

有没有人有类似的问题?

c++ code-coverage lcov

8
推荐指数
0
解决办法
3400
查看次数

未为 dotnet core 项目生成 Coverlet lcov.info 文件

我正在 Linux 机器内使用 VS 代码开发 dotnet core 项目。

按照以下博客生成覆盖率报告: https://www.hanselman.com/blog/AutomaticUnitTestingInNETCorePlusCodeCoverageInVisualStudioCode.aspx

正如那里提到的,我传递了 dotnet 测试参数,如下所示:

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov.info
Run Code Online (Sandbox Code Playgroud)

并期望生成 lcov.info 文件,但它没有。

我在这里错过了什么吗?

ps:我已经包含这个包了

 <PackageReference Include="coverlet.collector" Version="1.3.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)

code-coverage lcov .net-core visual-studio-code coverlet

8
推荐指数
1
解决办法
2806
查看次数

CMake和lcov:找不到gcno文件

我正在尝试在我的基于CMake的项目(包含几个目标)上获得代码覆盖率.

首先,我生成gcno文件:

lcov -b . -d . -o coverage.output --capture --initial
Run Code Online (Sandbox Code Playgroud)

*.gcno在产生

build_dir/[target_dir]/CMakeFiles/[target_dir].dir
Run Code Online (Sandbox Code Playgroud)

然后我运行我的测试,生成*.gcna文件

build_dir/tests/CMakeFiles/[target_dir].dir
Run Code Online (Sandbox Code Playgroud)

当我现在再次运行lcov时:

lcov -b . -d . -o coverage.output --capture
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Scanning . for .gcda files ...
Found 23 data files in .
Processing Base.dir/DateTools.cpp.gcda
geninfo: ERROR: build_gcov/tests/CMakeFiles/Base.dir/DateTools.cpp.gcno: could not open file
Run Code Online (Sandbox Code Playgroud)

当我手动移动*.gcno文件到该目录*.gcda产生它似乎工作.

谢谢你的帮助!!!

c++ code-coverage cmake gcov lcov

7
推荐指数
1
解决办法
7959
查看次数

LCOV在函数末尾分支

在此输入图像描述

这个函数末尾的分支是什么.我怎么能掩盖他们?

c++ gcov lcov

7
推荐指数
1
解决办法
2883
查看次数

生成空的.gcda文件

我使用gcov进行代码覆盖分析,使用lcov生成覆盖的图形输出.这适用于已执行目标文件的至少一部分的代码文件.我希望能够跟踪尚未执行的文件.我怀疑这与不为这些文件生成的.gcda文件有关.有没有办法强制生成所有目标文件的.gcda文件,而不管执行情况如何?

gcov lcov

7
推荐指数
1
解决办法
2004
查看次数

C++在CMake项目中使用GCOV/LCOV

我正在使用类似于以下结构的C++项目:

---  /src
    |--comms
    |--utils
    |--interfaces
    …
    CMakeList.txt
--- /test
    |---test1/
              |--main.cpp
              |--CMakelists.txt

--CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

我确实需要控制测试的覆盖范围,为此我用这种方式使用GCOV和LCOV:

  1. 在所有CMakeLists.txt中启用coverage标志,以生成.gcno文件.

    SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fprofile-arcs -ftest-coverage")
    SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage")
    SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行测试,生成相应的.gcda文件.

    此时,文件gcno和gcda与相应的.o文件位于同一目录中.我无法移动这些文件,因为如果我这样做,报告覆盖率生成就不起作用了.

  3. 从该文件的目录.gcno.gcda位于我做到以下几点:

    lcov –c –d . –o name.info      
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用以下方法生成HTML报告:

    genhtml  name.info.
    
    Run Code Online (Sandbox Code Playgroud)

当我编译项目时,我有重复的.gcno文件,因为在编译测试时,他们需要重新编译它们的依赖项(comms,utils,...),因为我没有为这些依赖项生成库.如果我不使用库,我认为没有办法避免这种情况.

但是,当我尝试index.html为全局项目生成(覆盖率报告)时,它不起作用.

我用我的创建项目相同的文件夹结构,并复制每一个shell脚本.gcno,并.gcda到相应的目录中.我执行命令lcovgenhtml,尽管如此,index.html 包括所有项目的覆盖范围.

我将不胜感激任何帮助.

cmake gcov lcov

7
推荐指数
1
解决办法
3759
查看次数

constexpr 构造函数不会显示覆盖率数据

今天我将我的矩阵类重写为constexpr. 我对这个类有 100% 的单元测试覆盖率,但我注意到在将几乎所有函数转换为 constexpr 后,构造函数的一部分在 lcov 中被标记为根本不再被覆盖。

这是只有构造函数的类。

template<typename T, std::size_t m, std::size_t n>
class Matrix
{
static_assert(std::is_arithmetic<T>::value,
                  "Matrix can only be declared with a type where "
                  "std::is_arithmetic is true.");

public:
    constexpr Matrix(
        std::initializer_list<std::initializer_list<T>> matrix_data)
    {
        if (matrix_data.size() != m)
        {
            throw std::invalid_argument("Invalid amount of rows.");
        }

        for (const auto& col : matrix_data)
        {
            if (col.size() != n)
            {
                throw std::invalid_argument("Invalid amount of columns.");
            }
        }


        std::size_t pos_i = 0;
        std::size_t pos_j = 0;

        for (auto …
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing code-coverage gcov lcov

7
推荐指数
1
解决办法
701
查看次数

Vue CLI 3-纽约市伊斯坦布尔代码报告不包括Vue文件

我已经尝试了几个小时,以便为我的新vue(基于打字稿的)项目(由vue-cli v3生成)启动并运行伊斯坦布尔代码覆盖率报告。

每当我运行测试时:(nodemon --exec nyc vue-cli-service test:unit)仅包含.ts文件,即使我已明确设置nyc应包括这些文件:

Package.json

"nyc": {
    "check-coverage": true,
    "per-file": true,
    "lines": 80,
    "instrument": true,
    "sourceMap": true,
    "statements": 80,
    "functions": 80,
    "branches": 80,
    "include": [
        "apollo-server/**/*.{ts,vue}",
        "apollo-server/*.vue",
        "src/**/*.{ts,vue}",
        "src/*.vue"
    ],
    "exclude": [
    ],
    "reporter": [
        "lcov",
        "text",
        "text-summary"
    ],
    "extension": [
        ".ts",
        ".vue"
    ],
    "cache": true,
    "all": true
}
Run Code Online (Sandbox Code Playgroud)

我也曾尝试设置nyc.instrumentnyc.sourceMap假以允许像这样的WebPack配置自定义加载器:

Vue.config.js

module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
    ? '/'
    : '/',
configureWebpack: config => {
    // if (process.env.NODE_ENV === "coverage") …
Run Code Online (Sandbox Code Playgroud)

lcov istanbul vuejs2 nyc vue-cli-3

7
推荐指数
0
解决办法
657
查看次数