Add gcov code coverage instrumentation to C/C++ projects
Instrument C/C++ programs with gcov to measure test coverage.
The instrumented project is untrusted — its build scripts and the produced binary execute arbitrary code, and the .gcda/.gcno files that binary emits are untrusted bytes parsed by gcov/gcovr. Run every build, target-binary/test-suite execution, and gcov/gcovr invocation via libexec/raptor-run-sandboxed --output-dir <dir> <cmd> [args...] (--output-dir = the directory the command writes into). If a sandboxed step fails, fix the sandboxed invocation — never run the target's build system, binary, or the coverage extraction bare.
libexec/raptor-run-sandboxed --output-dir <project-dir> gcc --coverage -o program source.clibexec/raptor-run-sandboxed --output-dir <project-dir> <project-dir>/program
# Creates .gcda files with execution dataText report (sandboxed — gcov parses the untrusted .gcda/.gcno bytes):
libexec/raptor-run-sandboxed --output-dir <project-dir> gcov source.c
# Creates source.c.gcov with line-by-line coverageHTML report (sandboxed):
libexec/raptor-run-sandboxed --output-dir <project-dir> gcovr --html-details -o coverage.html--coverage (shorthand for -fprofile-arcs -ftest-coverage -lgcov)CFLAGS and LDFLAGSENABLE_COVERAGE ?= 0
ifeq ($(ENABLE_COVERAGE),1)
CFLAGS += --coverage
LDFLAGS += --coverage
endifoption(ENABLE_COVERAGE "Enable coverage" OFF)
if(ENABLE_COVERAGE)
add_compile_options(--coverage)
add_link_options(--coverage)
endif()All build/run/report commands below go through libexec/raptor-run-sandboxed --output-dir <project-dir> ... (every make target — clean included — executes the untrusted Makefile's commands; rm -f *.gcda *.gcno is your own command and needs no wrapper):
--coverage to CFLAGS and LDFLAGSlibexec/raptor-run-sandboxed --output-dir <project-dir> make clean (or bare rm -f *.gcda *.gcno)libexec/raptor-run-sandboxed --output-dir <project-dir> make ENABLE_COVERAGE=1 (or the cmake -DENABLE_COVERAGE=ON + build equivalent, same wrapper)libexec/raptor-run-sandboxed --output-dir <project-dir> make test (or the project's test binary, same wrapper)libexec/raptor-run-sandboxed --output-dir <project-dir> gcovr --html-details coverage.html --print-summaryText (.gcov files):
-: 0:Source:main.c
5: 42: int x = 10;
#####: 43: unused_code();5: = executed 5 times#####: = not executed-: = non-executableHTML: Interactive report with color-coded coverage
Target: 80%+ line coverage, 70%+ branch coverage
gadievron/raptor
5480e95
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.