Ignore or exclude code in external libraries with gcov
Asked Answered
M

1

7

I am working on a project which uses a couple of boost libraries. When looking at our test reports, we have seen that test coverage information sometimes does fit to our source code. I was able to track it down to boost::range. I think it is because of some static initialization inside the library, although I cannot say anything more specific.

Basically, if you compile the following code with gcc --coverage, run it and print the coverage report with gcov -b, there will be four additional branches and an additional line, which I would like to ignore.

#include <boost/range.hpp>

int foo(int x)
{
    return x+1;
}

int main(int argc, char* argv[])
{
    return foo(argc);
}

The coverage report is: Lines executed:100.00% of 5 Branches executed:100.00% of 4 Taken at least once:50.00% of 4 Calls executed:100.00% of 2 Creating 'test_gcov.cpp.gcov'

I guess that the count of 5 lines comes from the two function signatures, the function bodies and one additional line in the boost::range library. I don't know where exactly, but the generated gcov-file shows that some static initialization is going on, so I guess that is where the branches are located.

I would like to know if there is a way to tell gcov to ignore any code in the boost namespace, or any other means.

Moshemoshell answered 19/10, 2015 at 15:2 Comment(2)
Were you able to fond out answer for your problem? I am solvin a similar one and any hints would be appreciated. :)Ozell
@Ozell Sorry, I couldn't find the reason quickly and then had to turn to some other issue.Moshemoshell
R
6

You can use the --remove or -r flag to ignore files from external libraries. For example:

lcov -c -d <build_dir> -o <output_trace_file>
lcov -r <output_trace_file> "/usr*" -o <output_trace_file>

You can replace "/usr*" with whatever pattern you're trying to remove.

The blog post here gives a good example of how to use that flag (and covers the whole lcov process, start to finish.)

Resigned answered 13/12, 2018 at 19:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.