【问题标题】:lcov not working properly for coveragelcov 无法正常工作以进行覆盖
【发布时间】:2014-03-21 05:36:59
【问题描述】:

我正在尝试使用 gcc 4.8.2 和 lcov 1.10 为测试获取 html 覆盖率。我确信我的源文件、对象和 gcov 文件位于同一个位置,并且我正在从运行编译器的目录中运行 lcov。

我收到以下错误:

$ lcov --capture --directory "objs/i386/MinGW/Os_SingleCore_SC3
/IocTest_tests_SingleCore_SC3" --output-file coverage.info
Capturing coverage data from objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Found gcov version: 4.8.2
Scanning objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3 for .gcda files ...
Found 3 data files in objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Processing IocTest_tests_SingleCore_SC3/IocTest.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#IocTest.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\IocTest.c
Processing IocTest_tests_SingleCore_SC3/OS_REQ.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#OS_REQ.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\OS_REQ.c
Processing IocTest_tests_SingleCore_SC3/TestMain.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#TestMain.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\TestMain.c
Finished .info-file creation

【问题讨论】:

    标签: gcov lcov


    【解决方案1】:

    首先,我建议检查 gcov 是否返回正确的覆盖率数据。 意味着需要运行 gcov 工具并检查 *.gcov 文件以获得实际结果。如果它返回任何覆盖范围。

    其次你可以使用--base-directory,例如

    $ lcov --base-directory .  --directory . -c -o gcov/lcov.info
    

    【讨论】:

      【解决方案2】:

      我发现这些步骤可行:https://codeflu.blog/2014/12/26/using-gcov-and-lcov-to-generate-beautiful-c-code-coverage-statistics/

      您是否首先使用-g -O0--coverage 标志进行编译?您是否将构建目录中的 .gcno 文件复制到与 .gcda 文件相同的目录中?

      您是否尝试过添加选项 --ignore-errors gcov,source,graph ?它实际上可能在某些文件中工作,这将确保 lcov 继续运行任何问题文件。如果你发现文件可以工作,那么你可以退后一步找出为什么上面的文件对 lcov 不起作用。也许他们缺少相应的 .gcno 文件。

      【讨论】:

        【解决方案3】:

        更新 CMakeList.txt 以添加以下标志:

        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
        set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)
        

        转到构建目录

        cd {project/lib}
        rm -rf *  //Remove all items if you want 
        cmake ..
        make
        ./MyTest
        

        运行测试用例以获取 .gcda 文件。可能还有其他方法可以生成 gcda 文件,但我更喜欢这种方式

        lcov --capture --directory . --output-file AnyName.info
        

        AnyName.info 将包含输出

        genhtml AnyName.info --output-directory CODE_COVERAGE
        

        你会在当前目录中找到一个目录 CODE_COVERAGE,进入 CODE_COVERAGE 并双击 index.html 它将显示测试用例的当前代码覆盖率

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-16
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多