liyu1981/kcov
a fork of kcov, for better covering zig/c/cpp, with same usage as kcov
kcov
for better covering ZigThis is a rather than naive fork of wonderful kcov
for better supporting Zig projects.
unreachable
and @panic
for auto ignoring.Here is a screenshot of auto ignoring unreachable
.
Here is another screenshot of auto ignoring @panic
.
/* no-cover */
to mark a line to be ignored.Here is a screenshot of manual ignoring by placing /* no-cover */
in c source file.
There is no change of original kcov
usage, it will just work. Please follow the below original Kcov README.
The best way is to compile from source. It can be done as follows (you will need cmake
, ninja
, llvm@>16
as I tried)
git clone https://github.com/liyu1981/kcov.git
cd kcov
mkdir build
cd build
CC="clang" CXX="clang++" cmake -G Ninja ..
ninja
after building is done. The binary is at build/src/kcov
. Copy somewhere and use it.
(Or you can download a copy of Apple Silicon version binary from the release section.)
.zig
extension..c/.cpp/.cc
extension.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
Refer to the INSTALL file for build instructions, or use our official Docker images:
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.
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.
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
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
kcov is written by Simon Kagstrom [email protected] and more information can be found at the web page