C++ gcovr排除的问题
我在一个源代码外版本上运行gcovr(3.3),如:C++ gcovr排除的问题,c++,code-coverage,gcovr,C++,Code Coverage,Gcovr,我在一个源代码外版本上运行gcovr(3.3),如: gcovr--root=/path/to/source--object directory=/path/to/build 现在我想从报告中排除两种不同的内容: 1) 名称中包含“Test”的任何.cpp文件 --exclude='.*Test.*'似乎不起作用 2) 目录中的所有源文件(例如/path/to/source/MyModule/) --exclude='/path/to/source/MyModule/*'似乎不起作用 --exc
gcovr--root=/path/to/source--object directory=/path/to/build
现在我想从报告中排除两种不同的内容:
1) 名称中包含“Test”的任何.cpp
文件
--exclude='.*Test.*'
似乎不起作用
2) 目录中的所有源文件(例如/path/to/source/MyModule/
)
--exclude='/path/to/source/MyModule/*'
似乎不起作用
--exclude directories='/path/to/source/MyModule'
似乎也不起作用
我的问题
a) --exclude directories
的作用是什么,因为您似乎(应该)能够通过传递给--exclude
的正确正则表达式排除目录
b) 关于
--exclude
不能按预期工作的原因,有什么建议吗?也许这些不是正确的正则表达式类型/样式?这两个选项都没有很好的文档记录,因此主要的知识来源是
a) 什么是--exclude目录,因为您似乎(应该)能够通过传递给--exclude的正确正则表达式排除目录
--排除目录
选项,gcovr使用该选项按名称而不是完整路径跳过目录。如果您检查gcovr的源代码,就可以对其进行验证。魔法在def link\u walker(路径)
功能中完成:
for root, dirs, files in os.walk(
os.path.abspath(path), followlinks=True
):
for exc in options.exclude_dirs:
for d in dirs:
m = exc.search(d)
根据文档,dirs
是子目录名称的列表。例如,要跳过以MyMod
开头的所有目录,请使用--exclude directories='MyMod.*'
b) 关于--excludes不能按预期工作的原因有什么建议吗?也许这些不是正确的正则表达式类型/样式
您的正则表达式是正确的。这是典型的Python正则表达式
要了解--exclude
选项的情况,启用-v
输出非常有用。启用此选项后,输出应有许多行:
currdir /cygdrive/f/test/path/to/source
gcov_fname myfile.cpp.gcov
[' -', ' 0', 'Source', 'myfile.cpp\n']
source_fname /cygdrive/f/test/path/to/source/myfile.gcda
root /cygdrive/f/test/path/to/source
fname /cygdrive/f/test/path/to/source/myfile.cpp
Parsing coverage data for file /cygdrive/f/test/path/to/source/myfile.cpp
此输出由函数生成。如果检查源代码,您将看到以下内容:
for exc in options.exclude:
if (filtered_fname is not None and exc.match(filtered_fname)) or \
exc.match(fname) or \
exc.match(os.path.abspath(fname))
排除过滤器适用于上面打印的fname
。这是绝对文件路径。它还适用于包含覆盖率数据的所有文件。如果文件被排除在外,则输出中应包含以下行(-v
需要选项):
谢谢你的解释。两个小问题:1)我仍然不明白
--exclude='.*/MyMod.*'
和--exclude directories='MyMod.*'
之间的区别?2) 你能解释一下--exclude
和--gcov exclude=
之间的区别吗?2)--gcov exclude
排除gcov数据文件。它适用于myfile.cpp.gcov
文件--exclude
excludecpp
文件。但是每个.cpp
文件不是只有一个.gcov
文件吗?当然可以,但是您可以创建正则表达式来匹配文件夹(类似于--exclude='.*/MyModule/*.
),对吗?所以我猜这真的是个帮手?我只是我只是想确保我的判断正确,你可以用--exclude directory
做任何事情,你也可以用--exclude
和适当的正则表达式来做。@RamkumarD--exclude
标志可以多次使用:
Excluding coverage data for file /cygdrive/f/test/path/to/source/myfile.cpp