如何让gcov和gcovr获取源文件和头文件
How to make gcov and gcovr pick up source and header files
我正在尝试使用 .bat 文件为项目生成覆盖率报告,详情如下。
- 我看到的 .gcov 文件很少。此外,当我在生成的 html 输出上单击 link 时,我无法看到文件详细信息(文件未找到错误)。我该如何解决?
- 执行 .bat 文件后,我看到类似“parsing coverage data for QString.h”(QT 库文件)的输出。是否符合预期?
我看过很多相关问题,但我无法弄清楚
(in report_coverage.bat)
set GCovrpath= C:\python37\script\lib\
set GCovpath= C:\abc\ghj\bin\
set datafiles= C:\source\mywork\root\testing\unittests\rose\build\debug\
set gcovr_src= C:\source\mywork\root\
%GCovpath%gcov.exe %datafiles% >> output.log
gcovr %datafiles% -s -p --html --html-details --gcov-executable %GCovpath%gcov.exe -o Test.html –verbose
这里有详细信息……
使用
编译和执行代码
QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
QMAKE_LFLAGS += --覆盖率
.GCNO 和 .GCDA 文件按预期生成
目录结构看似简单
Root
Header
Rose
Marigold
Jasmin
Source
Rose
Marigold
Jasmin
Testing
UnitTests
Rose
build
debug
Marigold
build
debug
Jasmin
build
debug
谢谢。
更新:
请参阅下面的答案
如果您自己调用 gcov,则需要 运行 从执行编译器的同一目录中调用它,并且需要为其指定 gcno、gcda 或源文件的路径。 Gcov 一次只能处理一个输入文件。
当 gcov 运行s 在正确的位置时,它可以查看编译元数据以找到正确的源文件。如果出现缺少源文件的错误,则表示您没有使用正确的目录。
Gcovr 运行s gcov 自动,并具有启发式算法来找出正确的目录。但是,您仍然应该从开始编译的目录(通常是构建目录)中 运行 它。
如果不属于您的项目,gcovr 将排除覆盖率数据。如果您有单独的构建目录,则需要将 --root
参数设置为包含源代码的目录。 Gcov 处理已编译的 所有 文件的覆盖率数据,这使得 gcovr 必须进行 post 处理。
在详细模式下,gcovr 在打开 gcov 报告时会输出“Parsing coverage data for ”。然后它将使用文件中的数据来决定它是否属于您的项目,如果源代码是您项目的一部分,则输出“过滤覆盖率数据”,否则输出“排除覆盖率数据”。
覆盖率报告可能不完整的原因有多种:
- 过滤有问题。
- 当多个文件具有相同的名称时,Gcovr 的启发式算法可能会变得混乱,例如在不同目录中名为
util.h
的两个文件。
- Gcovr 的 --html-details 报告包含多个 .html 文件,因此请确保它们都可用。
在您的 BAT 文件中,此调用可能效果更好:
gcovr --root ../src --print-summary --sort-percentage --html-details --gcov-executable %GCovpath%gcov.exe --output Test.html --verbose
假定以下目录结构,并且您 运行 gcovr 来自 build/
:
your-project/
src/
Header/
...
Source/
...
Testing/
...
build/
...
如果像 ../src
这样的根路径有问题,请考虑使用像 C:/path/to/the/src
.
这样的绝对路径
我对 windows.
的“\”强调不够
运行 来自调试文件夹的命令(因为 test.exe 在这里)
gcov -b -l -s C:\source\mywork\root\ debug\*.gcno
运行 单元测试文件夹中的此命令(这将排除 .h 文件和包含 test 的文件)
gcovr -g -k -v --root C:\source\mywork\root\ -e ".*\.h" -e ".*test[_-|A-Z|a-z|0-9]*\.cpp" --html --html-details -o report.html
我正在尝试使用 .bat 文件为项目生成覆盖率报告,详情如下。
- 我看到的 .gcov 文件很少。此外,当我在生成的 html 输出上单击 link 时,我无法看到文件详细信息(文件未找到错误)。我该如何解决?
- 执行 .bat 文件后,我看到类似“parsing coverage data for QString.h”(QT 库文件)的输出。是否符合预期?
我看过很多相关问题,但我无法弄清楚
(in report_coverage.bat)
set GCovrpath= C:\python37\script\lib\
set GCovpath= C:\abc\ghj\bin\
set datafiles= C:\source\mywork\root\testing\unittests\rose\build\debug\
set gcovr_src= C:\source\mywork\root\
%GCovpath%gcov.exe %datafiles% >> output.log
gcovr %datafiles% -s -p --html --html-details --gcov-executable %GCovpath%gcov.exe -o Test.html –verbose
这里有详细信息……
使用
编译和执行代码QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
QMAKE_LFLAGS += --覆盖率 .GCNO 和 .GCDA 文件按预期生成
目录结构看似简单
Root
Header
Rose
Marigold
Jasmin
Source
Rose
Marigold
Jasmin
Testing
UnitTests
Rose
build
debug
Marigold
build
debug
Jasmin
build
debug
谢谢。
更新: 请参阅下面的答案
如果您自己调用 gcov,则需要 运行 从执行编译器的同一目录中调用它,并且需要为其指定 gcno、gcda 或源文件的路径。 Gcov 一次只能处理一个输入文件。
当 gcov 运行s 在正确的位置时,它可以查看编译元数据以找到正确的源文件。如果出现缺少源文件的错误,则表示您没有使用正确的目录。
Gcovr 运行s gcov 自动,并具有启发式算法来找出正确的目录。但是,您仍然应该从开始编译的目录(通常是构建目录)中 运行 它。
如果不属于您的项目,gcovr 将排除覆盖率数据。如果您有单独的构建目录,则需要将 --root
参数设置为包含源代码的目录。 Gcov 处理已编译的 所有 文件的覆盖率数据,这使得 gcovr 必须进行 post 处理。
在详细模式下,gcovr 在打开 gcov 报告时会输出“Parsing coverage data for
覆盖率报告可能不完整的原因有多种:
- 过滤有问题。
- 当多个文件具有相同的名称时,Gcovr 的启发式算法可能会变得混乱,例如在不同目录中名为
util.h
的两个文件。 - Gcovr 的 --html-details 报告包含多个 .html 文件,因此请确保它们都可用。
在您的 BAT 文件中,此调用可能效果更好:
gcovr --root ../src --print-summary --sort-percentage --html-details --gcov-executable %GCovpath%gcov.exe --output Test.html --verbose
假定以下目录结构,并且您 运行 gcovr 来自 build/
:
your-project/
src/
Header/
...
Source/
...
Testing/
...
build/
...
如果像 ../src
这样的根路径有问题,请考虑使用像 C:/path/to/the/src
.
我对 windows.
的“\”强调不够运行 来自调试文件夹的命令(因为 test.exe 在这里)
gcov -b -l -s C:\source\mywork\root\ debug\*.gcno
运行 单元测试文件夹中的此命令(这将排除 .h 文件和包含 test 的文件)
gcovr -g -k -v --root C:\source\mywork\root\ -e ".*\.h" -e ".*test[_-|A-Z|a-z|0-9]*\.cpp" --html --html-details -o report.html