Merging Coverage Data

You can merge coverage data from multiple runs with -a/--json-add-tracefile/--add-tracefile.

For each run, generate JSON output:

...  # compile and run first test case
gcovr ... --json run-1.json
...  # compile and run second test case
gcovr ... --json run-2.json

Next, merge the json files and generate the desired report:

gcovr --json-add-tracefile run-1.json --json-add-tracefile run-2.json --html-details coverage.html

You can also use unix style wildcards to merge the json files without duplicating -a/--json-add-tracefile/--add-tracefile. With this option you have to place your pathnames with wildcards in double quotation marks:

gcovr --json-add-tracefile "run-*.json" --html-details coverage.html

If you want to merge coverage reports generated in different --root directories you can use the --json-base to get the same root directory for all reports.

If you have same function names defined on different line the default behavior is to abort. With the --merge-mode-functions you can change this:

  • strict: Abort if same function is defined on a different line (old behavior).

  • merge-use-line-0: Allow same function on different lines, in this case use line 0.

  • merge-use-line-min: Allow same function on different lines, in this case the minimum line.

  • merge-use-line-max: Allow same function on different lines, in this case use maximum line.

  • separate: Allow same function on different lines. Instead of merging keep the functions separate.

Added in version 6.0: The gcovr --json-base option. The gcovr --merge-mode-functions option.