首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcovr排除的麻烦

gcovr排除的麻烦
EN

Stack Overflow用户
提问于 2016-09-24 02:14:15
回答 1查看 7.2K关注 0票数 3

我在一个源代码外构建上运行gcovr (3.3),如:

gcovr --root=/path/to/source --object-directory=/path/to/build

现在我想从报告中排除两件不同的事情:

1)任何以“测试”为名的.cpp文件

--exclude='.*Test.*'似乎不起作用

2)目录中的所有源文件(例如/path/to/source/MyModule/)

--exclude='/path/to/source/MyModule/.*'似乎不起作用。

--exclude-directories='/path/to/source/MyModule'似乎也不起作用。

我的问题

( a) --exclude-directories是为了什么,因为您(应该)应该能够排除一个目录,并将正确的regex传递给--exclude

( b)对于--exclude不按预期工作的原因,有什么建议吗?也许这些不是正确的正则表达式的类型/风格?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 09:16:42

这两个选项都没有很好的文档记录,因此知识的主要来源是源代码

( a)什么是--排除--目录,因为似乎您应该(应该)能够排除一个目录,并将正确的regex传递给--排除?

由gcovr使用的--exclude-directories选项可以跳过目录的名称,而不是完全路径。如果您检查gcovr的源代码,就可以验证它。魔术是用def link_walker(path)函数实现的:

代码语言:javascript
复制
    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)

根据os.walk文档,dirs是子目录名称的列表。要跳过以MyMod开头的所有目录,请使用--exclude-directories='MyMod.*'

( b)有何建议也许这些不是正确的正则表达式的类型/风格?

您的正则表达式是正确的。这是典型的Python正则表达式。

要了解在--exclude选项中发生了什么,启用-v输出是很有用的。启用此选项后,输出应该有很多行:

代码语言:javascript
复制
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

这个输出由def process_gcov_data(data_fname, covdata, source_fname, options)函数产生。如果您检查源代码,您将看到以下内容:

代码语言:javascript
复制
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选项):

代码语言:javascript
复制
Excluding coverage data for file /cygdrive/f/test/path/to/source/myfile.cpp
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39671850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档