Neatbo.

LCOV offline coverage report

Read one local LCOV 1.x tracefile, recompute coverage totals, retain unknown branches and download a complete offline HTML report.

Browser-local processingInputLCOV tracefileOutputOffline HTML / JSON / CSVUp to 5 MiB per file · File limit: 1
  1. 1Add input
  2. 2Adjust settings
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop it here

Files stay on this device. Your originals stay unchanged.

.info · .lcov · .txt

Up to 5 MiB per file · File limit: 1

    0 characters · 0 bytes
    Options

    Complete the required options first. You can keep the defaults for the rest.

    Preparing the tool…

    Before you start

    Review coverage exported by your test runner without reading source paths. Inspect the real line/function/branch counts, compare stale declared counters and keep a standalone HTML report beside the tracefile.

    How to use this tool

    1. Paste or open one complete LCOV 1.x tracefile from the test runner.
    2. Check recomputed totals, unknown branches and declared-versus-actual summary differences.
    3. Download coverage.html plus complete JSON/CSV. Open HTML locally and retain the original tracefile.

    Supported inputs and limits

    One UTF-8 file or pasted tracefile up to 5 MiB, 50,000 coverage points (DA + FN + BRDA) and 1,000 complete source records. One record per exact source path; duplicate paths reject instead of silently merging test contexts. Selected file takes precedence. Total downloads up to 10 MiB; table preview first 200 records.

    Supports LCOV 1.x TN, SF, FN, FNDA, DA, BRDA, LF/LH/FNF/FNH/BRF/BRH and optional VER. FNDA and FN order may differ; every function needs both location and count. Counts and branch identifiers are nonnegative uint64; source lines are 1–2147483647. DA checksum, when supplied, is 32 hexadecimal characters. New FN end-line, FNL/FNA and MC-DC extensions reject.

    Coverage totals are recomputed from actual points. Declared summary differences stay visible in the report; they do not become the denominator. BRDA “-” remains unknown, contributes to found branches and is never changed into a hit count of zero. A zero denominator is n/a/null rather than 100%.

    Full HTML lists every point and summary difference, escapes all file/test/function text and contains no scripts or links that read source paths. JSON preserves uint64 hit counts as decimal strings. CSV contains every source record; spreadsheet protection may prefix formula-like labels. No source fetching, tracefile merging, test execution or coverage measurement.

    Worked example

    Example input

    TN:unit
    SF:src/example.c
    FN:1,covered
    FN:4,missing
    FNDA:3,covered
    FNDA:0,missing
    DA:1,3
    DA:2,0
    DA:4,0
    BRDA:1,0,0,3
    BRDA:1,0,1,-
    LF:3
    LH:1
    FNF:2
    FNH:1
    BRF:2
    BRH:1
    end_of_record
    
    Example options
    {"secondary":"","params":{"spreadsheetSafe":true}}

    Example output

    {
      "format": "LCOV 1.x",
      "records": [
        {
          "path": "src/example.c",
          "testName": "unit",
          "version": null,
          "lines": [
            {
              "line": 1,
              "hits": "3",
              "checksum": null
            },
            {
              "line": 2,
              "hits": "0",
              "checksum": null
            },
            {
              "line": 4,
              "hits": "0",
              "checksum": null
            }
          ],
          "functions": [
            {
              "name": "covered",
              "line": 1,
              "hits": "3"
            },
            {
              "name": "missing",
              "line": 4,
              "hits": "0"
            }
          ],
          "branches": [
            {
              "line": 1,
              "block": "0",
              "branch": "0",
              "hits": "3"
            },
            {
              "line": 1,
              "block": "0",
              "branch": "1",
              "hits": null
            }
          ],
          "declared": {
            "LF": "3",
            "LH": "1",
            "FNF": "2",
            "FNH": "1",
            "BRF": "2",
            "BRH": "1"
          },
          "computed": {
            "LF": 3,
            "LH": 1,
            "FNF": 2,
            "FNH": 1,
            "BRF": 2,
            "BRH": 1
          },
          "summaryDifferences": []
        }
      ],
      "coverPoints": 7,
      "lines": 3,
      "lineHits": 1,
      "functions": 2,
      "functionHits": 1,
      "branches": 2,
      "branchHits": 1,
      "unknownBranches": 1,
      "summaryDifferences": 0,
      "summaryCountersAgree": true,
      "lineCoveragePercent": 33.333333333333336,
      "functionCoveragePercent": 50,
      "branchCoveragePercent": 50
    }

    When something does not work

    Check matching FN/FNDA names, unique coverage-point keys, complete end_of_record markers, nonnegative uint64 counts and the supported LCOV version. Regenerate duplicate-path or extended-format traces with the producer. For stale counters, use the reported actual values. Correct the original and rerun.

    Frequently asked questions

    Why does a summary counter disagree?

    The tool recomputes totals from coverage points. A syntactically valid stale LF/LH or other counter is reported with its actual value; the report does not use it to inflate coverage.

    Does “-” mean a branch was taken zero times?

    No. It means no execution count is available. The branch remains unknown and is included in the found-branch denominator.

    Can the report show source text or combine runs?

    No. Paths are escaped labels and are never read or fetched. Duplicate source paths and newer format extensions reject; export a supported complete tracefile from the producer.

    Documentation & further reading

    Related tools