4

我想使用 gcov 和 lcov 生成覆盖率报告。

到目前为止我所做的:-

1. I compiled my code using --fprofile-arcs and -fprofile-coverage in
g++.

2. I have linked using lcov.

3. I have .gcno files with th e.o location.

4. When I execute binary, it is resulting into .gcda files.

我必须做的:-

我必须使用这些数据文件 (.gcda) 并想使用 lcov 创建一个干净的报告。

问题:-

有多个目录,其中有源文件,在每个目录中,我正在创建一个 obj/ARCH 目录来保存目标文件。

因此最终的目录结构将是:-

  proto  ----> MJ1 ----> MJ2 ----> MJ3 ----> MJ4 ----> MJ5

  MJ1 ----> .cpp 

      ----> obj/linux/*.o *.gcno *.gcda 

  MJ2 ----> .cpp 

      ----> obj/linux/*.o *.gcno *.gcda 

与 M3、M4、M5 相同。

我正在从 proto 级别执行 lcov,它会找到 .gcda 文件,但在查找 .h 和 .C 文件时会出现一些错误。知道如何使此流程路径独立吗?

Error:-
../MjUtil/glob.h:cannot open source file
../MjUtil/MJError.h:cannot open source file
../MjUtil/OsStatisticsFile.h:cannot open source file

提前致谢。

4

3 回答 3

1

您是否尝试过--base-directory .为 lcov 提供选项?

于 2014-09-03T11:34:12.773 回答
1

--directory您可以多次传递标志,lcov将按顺序解析每一个。

于 2021-01-03T22:18:12.007 回答
0

通常在编译 CPP 时尝试绝对路径是个好主意。

它也不应该取决于你运行 lcov 的目录。例如:

lcov -c -d ../../../src -o lcov.info

并且 src 目录包含:

主.cpp 主.gcno 主.gcda

即使main.gcno文件包含main.cpp的相对路径,lcov 也会处理它。

您还应该确保没有移动 gcda/gcno 文件。通过脚本或手动。如果它们已被移动,当然相对路径将不正确,lcov 将无法找到源。

于 2014-09-26T14:17:01.723 回答