kcov
Kcov is a FreeBSD/Linux/OSX code coverage tester for compiled languages, Python
and Bash. Kcov was originally a fork of Bcov, but has
since evolved to support a large feature set in addition to that of Bcov.
Kcov, like Bcov, uses DWARF debugging information for compiled programs to
make it possible to collect coverage information without special compiler
switches.
For a video introduction, look at this presentation from SwedenCPP
Installing
Refer to the INSTALL file for build instructions, or use our official Docker images:
How to use it
Basic usage is straight-forward:
kcov /path/to/outdir executable [args for the executable]
/path/to/outdir will contain lcov-style HTML output generated
continuously while the application runs. Kcov will also write cobertura-
compatible XML output and generic JSON coverage information and can easily
be integrated in various CI systems.
Filtering output
It's often useful to filter output, since e.g., /usr/include is seldom of interest.
This can be done in two ways:
kcov --exclude-pattern=/usr/include --include-pattern=part/of/path,other/path \
/path/to/outdir executable
which will do a string-comparison and include everything which contains
part/of/path or other/path but exclude everything that has the
/usr/include string in it.
kcov --include-path=/my/src/path /path/to/outdir executable
kcov --exclude-path=/usr/include /path/to/outdir executable
Does the same thing, but with proper path lookups.
Merging multiple kcov runs
Kcov can also merge the results of multiple earlier runs. To use this mode,
call kcov with --merge
, an output path and one or more paths to an earlier
run, e.g.,
kcov --merge /tmp/merged-output /tmp/kcov-output1 /tmp/kcov-output2
kcov --merge /tmp/merged-output /tmp/kcov-output* # With a wildcard
Use from continuous integration systems
kcov is easy to integrate with travis-ci together with
coveralls.io or codecov.io. It can also
be used from Jenkins, SonarQube and GitLab CI.
Refer to
- coveralls for details about travis-ci + coveralls, or
- codecov for details about travis-ci + codecov
- jenkins for details about how to integrate in Jenkins
- sonarqube for how to use kcov and sonarqube together
- gitlab for use with GitLab
kcov is written by Simon Kagstrom simon.kagstrom@gmail.com and more
information can be found at the web page