GCC's built-in coverage tool. When you compile with --coverage, GCC instruments the binary and produces:
.gcnofiles ("notes") at compile time — which lines/branches exist.gcdafiles ("data") at runtime — which lines actually executed
gcov reads both and outputs per-file .gcov text files showing hit counts per line.