Neatbo.

Compare compilation database argv

Compare two compile_commands files by ordered declared argv and working directory, retaining sources and every invocation.

Browser-local processingInput2 × compile_commands.jsonOutputOriginals + JSON + CSVUp to 2 MiB per file · File limit: 2
  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 them here

Files stay on this device. Your originals stay unchanged.

.json

Up to 2 MiB per file · File limit: 2

    Options

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

    Paired absolute POSIX roots; identity and working directory only. At most 4,096 UTF-8 bytes each.

    Paired absolute POSIX roots; identity and working directory only. At most 4,096 UTF-8 bytes each.

    Preparing the tool…

    Before you start

    Compare two compile_commands files by ordered declared argv and working directory, retaining sources and every invocation.

    How to use this tool

    1. Select the before and after databases in that order.
    2. Enter paired roots if needed, then compare ordered argv.
    3. Review added, removed and changed invocations; download complete JSON/CSV and both originals.
    4. Validate linking, runtime behavior and binary results separately.

    Supported inputs and limits

    Select exactly two strict UTF-8 JSON files: before first, after second. Each allows 2 MiB, together 4 MiB; each original filename label allows 512 UTF-8 bytes. One leading file BOM is removed and recorded.

    POSIX lexical paths only. directory must be absolute; file/output resolve against it. No filesystem lookup or realpath. Optional beforeRoot/afterRoot must be paired absolute roots; component-boundary mapping affects identity and working directory only, never argv. Each root option allows 4,096 UTF-8 bytes as a parameter resource budget.

    Match source path plus optional output. Duplicate identities refuse the whole pair. arguments is preferred and retained in complete order with a nonempty executable; command supports a fixed POSIX single/double quote and backslash lexer.

    Reject shell expansion, unquoted operators/globs, command control characters, Windows path profiles, command assignment prefixes (such as FOO=1 cc), @response tokens and unknown invocation metadata. When arguments is present, command is retained as original metadata without interpretation or execution.

    Across both files: at most 5,000 invocations and 250,000 argv items. JSON containers allow 16 levels; decoded duplicate keys, malformed UTF-8 and unpaired Unicode surrogates refuse. Valid database structure has at most three container levels, so the depth guard is protective.

    Download both byte-exact originals, complete compilation-comparison.json and quote-all CSV. Outputs together allow 32 MiB and fail atomically. Every CSV cell has a formula-safe apostrophe prefix; JSON and source bytes preserve original text.

    Preview only the first 200 rows and 2,000 Unicode codepoints per cell. Copy is explicitly a summary. Complete matched, added and removed invocations and differing argv indices remain in downloads.

    Equality covers ordered declared argv and mapped working directory only. Flag meaning, linking, environment, headers, compiler behavior, ABI and binary equivalence remain unverified. Files and names stay in this browser.

    Worked example

    Example input

    before: [{"directory":"/work","file":"a.c","arguments":["cc","-O0","a.c"]}]; after: same source with -O2
    Example options
    beforeRoot=""; afterRoot=""

    Example output

    1 changed invocation, argv index 1; 2 originals, full JSON and CSV.

    When something does not work

    Correct source files, duplicate identities or unsupported shell structures, then retry both originals. After cancellation rerun the same selection.

    Frequently asked questions

    Does equality prove identical binaries?

    Equality covers ordered declared argv and mapped working directory only. Flag meaning, linking, environment, headers, compiler behavior, ABI and binary equivalence remain unverified. Files and names stay in this browser.

    Does root mapping hide paths inside argv?

    POSIX lexical paths only. directory must be absolute; file/output resolve against it. No filesystem lookup or realpath. Optional beforeRoot/afterRoot must be paired absolute roots; component-boundary mapping affects identity and working directory only, never argv. Each root option allows 4,096 UTF-8 bytes as a parameter resource budget.

    Related tools