kcov - Man Page

Code coverage analysis for compiled programs and Python scripts

Synopsis

kcov [options] outdir executable [args-for-executable...]

kcov --merge outdir <path-to-coverage> [path-to-more-coverage...]

Description

This manual page documents briefly the kcov command. kcov is a code coverage tester for ELF binaries, Python scripts and shell scripts. It allows collecting code coverage information from executables without special compiler directives, and continuously produces output from long-running applications.

See the GitHub page, https://github.com/SimonKagstrom/kcov, for more documentation.

Options

-p,  --pid=PID

Trace PID instead of executing executable (passing the executable is optional for this case). Under this mode, coverage collection for shared libraries will not work.

-l,  --limits=low,high

Setup limits for low/high coverage (default: 16,50).

--include-path=P1[,P2...]

Comma-separated list of paths to include in the report.

--exclude-path=P1[,P2...]

Comma-separated list of paths to exclude from the report.

--include-pattern=P1[,P2...]

Comma-separated list of path patterns to include in the report.

--exclude-pattern=P1[,P2...]

Comma-separated list of path patterns to exclude from the report.

--exclude-line=P1[,P2...]

Comma-separated list of line patterns to exclude (mark as non-code)

--exclude-region=START:END[,START1:END1...]

Comma-separated list of regions of lines patterns to exclude (mark as non-code). The region begins with START and ends with END.

--collect-only

Only collect coverage data, don't produce HTML/Cobertura output.

--report-only

Only report HTML/Cobertura output, don't collect data.

--merge

Merge the result of multiple kcov runs. Instead of a program to test, the output paths from previous runs should be given on the command line, or through a wildcard (*)

--coveralls-id=id

Upload data to coveralls.io using secret repo_token or Travis CI service job ID id. The ID is taken as a repo_token if it's longer or equal to 32 characters.

Uncommon Options

--path-strip-level=N

Number of path levels to show for common paths (default: 2).

--skip-solibs

Skip coverage collection for shared libraries (improves performance)

--verify

Verify that breakpoints are setup on instruction boundaries. This will slow down execution greatly, but can catch problems where the compiler generates bad DWARF data.

--exit-first-process

exit when the first process exits, i.e., honor the behavior of daemons. The default behavior is to return to the console when the last process exits.

--python-parser=PARSER

Set the python parser to use for Python programs (the default is python). Can be used to run with Python 3 on systems where Python 2 is the default.

--bash-parser=PARSER

Set the bash parser to use for shell scripts (the default is /bin/bash).

--bash-method=METHOD

Use collection method METHOD for bash scripts. The method can be either PS4, for use of the PS4 environment variable, or DEBUG for use of the DEBUG trap.

--bash-handle-sh-invocation

Handle invocations of /bin/sh scripts via using a LD_PRELOADed library that replaces execve (i.e., /bin/sh is executed as /bin/bash). Does not work well on some systems, so the default is not to use this.

--bash-dont-parse-binary-dir

Kcov parses the directory of the binary for other scripts and add these to the report. If you don't want this behavior, this option turns that off.

--bash-parse-files-in-dir=P1[,P2...]

Parse directories for bash scripts.

--replace-src-path=P1:P2

Replace source file path P1 with P2, if found.

--system-record

Perform full-system instrumentation on a sysroot, outputting patched binaries which collect coverage data. See doc/full-system-instrumentation.md for more information on full-system instrumentation.

--system-report

Produce coverage output for a full-system coverage run.

Examples

Check coverage for ./frodo and generate HTML output in /tmp/kcov and cobertura output in /tmp/kcov/frodo/cobertura.xml

kcov /tmp/kcov ./frodo

Check coverage for ./frodo but only include source files names with the string src/frodo

kcov --include-pattern=src/frodo /tmp/kcov ./frodo

Same as above but split collecting and reporting (perhaps on two different computers)

kcov --collect-only /tmp/kcov ./frodo

kcov --report-only --include-pattern=src/frodo /tmp/kcov ./frodo

HTML Output

The HTML output shows executed and non-executed lines of the source code. Some lines can map to multiple instrumentation points, for example for inlined functions (where every inlining of them will generate a separate instrumentation point). This is shown in the left column as 1/3 for example, which means that one of the three instrumentation points has been executed.

A special output link is [merged], which shows the union of all covered programs. This can be useful for example when you have unit tests in multiple binaries which share a subset of source files.

Cobertura Output

Kcov also outputs data in the Cobertura XML format, which allows integrating kcov output in Jenkins (see http://cobertura.sf.net and http://jenkins-ci.org).

The Cobertura output is placed in a file named out-path/exec-filename/cobertura.xml.

JSON Output

Kcov generates a very generic json file which includes the overall percent covered for a single command and the count of lines instrumented and covered. It also includes a summary of each source file with a percentage and line counts. This allows easy integration with GitlabCI (see https://docs.gitlab.com/ce/user/project/pipelines/settings.html).

The JSON output is placed in a file named out-path/exec-filename/coverage.json.

Author

Kcov was written by Simon Kagstrom, building upon bcov by Thomas Neumann.

This manual page was written by Michael Tautschnig <mt@debian.org>, for the Debian project (but may be used by others).

Info

November 24, 2011