which versions are you using: SonarQube Developer Edition - Version 7.9 (build 26994)
what are you trying to achieve: I am trying to get the code coverage working using sonar.cfamily.gcov.reportsPath
what have you tried so far to achieve this: Read below
Try to clone GitHub - peter-toft-greve/democode_sonarqube on a normal Linux machine - where gcov is installed.
With “make” I make code coverage analysis into “demo.gcov” like this
GCC Code Coverage Report
Directory: .
File Lines Exec Cover Missing
ext_fct.c 5 4 80% 6
main.c 5 4 80% 8
TOTAL 10 8 80%
I would hope/expect that adding
-Dsonar.cfamily.gcov.reportsPath=.
to the sonar-scanner command (cf. Test coverage overview)
I could have SonarQube show the coverage integrated into the web.
At the moment I have zero coverage and with the sonar.cfamily.gcov.reportsPath activated I have the sonar-scanner failing with
09:30:30 java.lang.NullPointerException 09:30:30 at org.sonar.api.batch.fs.internal.DefaultFilePredicates.is(DefaultFilePredicates.java:135) 09:30:30 at com.sonar.cpp.plugin.gcov.GcovSensor.lambda$execute$2(GcovSensor.java:56) 09:30:30 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source) 09:30:30 at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) 09:30:30 at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) 09:30:30 at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) 09:30:30 at java.base/java.util.Iterator.forEachRemaining(Unknown Source) 09:30:30 at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) 09:30:30 at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) 09:30:30 at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) 09:30:30 at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source) 09:30:30 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source) 09:30:30 at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) 09:30:30 at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source) 09:30:30 at com.sonar.cpp.plugin.gcov.GcovSensor.scan(GcovSensor.java:75) 09:30:30 at com.sonar.cpp.plugin.gcov.GcovSensor.execute(GcovSensor.java:52) 09:30:30 at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48) 09:30:30 at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85) 09:30:30 at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59) 09:30:30 at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77) 09:30:30 at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59) 09:30:30 at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82) 09:30:30 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136) 09:30:30 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122) 09:30:30 at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:400) 09:30:30 at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:395) 09:30:30 at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:358) 09:30:30 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136) 09:30:30 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122) 09:30:30 at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:141) 09:30:30 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136) 09:30:30 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122) 09:30:30 at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73) 09:30:30 at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) 09:30:30 at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46) 09:30:30 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 09:30:30 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 09:30:30 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 09:30:30 at java.base/java.lang.reflect.Method.invoke(Unknown Source) 09:30:30 at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) 09:30:30 at com.sun.proxy.$Proxy0.execute(Unknown Source) 09:30:30 at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:185) 09:30:30 at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137) 09:30:30 at org.sonarsource.scanner.cli.Main.execute(Main.java:112) 09:30:30 at org.sonarsource.scanner.cli.Main.execute(Main.java:75) 09:30:30 at org.sonarsource.scanner.cli.Main.main(Main.java:61)
I don’t get much info from a similar report - but see that it should be possible
make can generate demo.gcov
and sonarqube.sh can integrate to SonarQube - but I presumabe that the Makefile line 4 is not generating the format that SonarQube expects. More options needed??
you need to generate the coverage reports using gcov, not gcovr, as you can see in your demo.gcov you get only a summary. You need to call gcov for each of the source file, you can find many tutorial explaining how to generate gcov reports.