2

I'm trying to use gcovr to generate xml from gcno/gcda to feed the cobertura plugin in Jenkins. The application is built on a build machine and passed to a downstream job running on a unit test slave. The source files and the generated gcno files are copied in its original folder structure to the unit test machine as well. Since the build path and the installed path of the application differs I'm using GCOV_PREFIX_STRIP and GCOV_PREFIX to make the generated gcda files end up in the same locations as the corresponding gcno files. I can confirm that the gcda files are generated in the correct locations.

The Jenkins build master workspace is in:

/var/lib/jenkins/workspace/Coverage/

The application was built in:

/var/lib/jenkins/workspace/Coverage/BUILD/app/

The Jenkins unit test slave workspace is in:

/var/lib/jenkins/workspace/Coverage-Unittest/

The source code, gcno and gcda files are in (gcno/gcda are in subdirectories called 'o' relative to corresponding cpp):

/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/

which was achieved by setting:

GCOV_PREFIX_STRIP=7
GCOV_PREFIX=/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/

From the Jenkins unit test slave execute shell (current directory is the workspace) I execute:

python2 gcovr -v --gcov-executable=/opt/gcc-5.3.0/bin/gcov -x -r BUILD/app/.

However, the result is:

Gathered coveraged data for 0 files
<?xml version="1.0" ?>
<!DOCTYPE coverage
  SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
<coverage branch-rate="0.0" line-rate="0.0" timestamp="1478904126" version="gcovr 3.3">
<sources>
<source>BUILD/app/.</source>
</sources>
<packages/>
</coverage>

It is peculiar, because it seems that the gcda files are found. Some of the verbose output:

Scanning directory BUILD/app/. for gcda/gcno files...
Found 1891 files (and will process 1391)
...
Processing file: /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest/BUILD'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace/Coverage-Unittest'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins/workspace'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib/jenkins'
Running gcov: '/opt/gcc-5.3.0/bin/gcov /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/MyClass.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o' in '/var/lib'
...

Note how the same gcda file is listed several times, this is the case for all gcda files. The directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/o/ contains MyClass.gcda and MyClass.gcno and the directory /var/lib/jenkins/workspace/Coverage-Unittest/BUILD/app/packages/appw/lib/model/ contains MyClass.cpp.

The application was compiled using gcc 5.3.0 with the -coverage flag.

I would like the output xml to contain the coverage information, how to fix that?

joaerl
  • 1,012
  • 1
  • 10
  • 21
  • Does gcovr work on your local machine without all this copying and path fixing? – arved Nov 12 '16 at 14:13
  • @arved Yes, it does – joaerl Nov 12 '16 at 21:58
  • I think my conclusion is that it is not possible using gcovr. All source code paths are hard-coded during the compile step into the .gcno files and as far as I can tell, there is no way to work around this using gcovr. There is, however, if using lcov instead, which you can see here http://stackoverflow.com/questions/40642912/cannot-generate-coverage-report-using-lcov – joaerl Nov 17 '16 at 19:13

0 Answers0