Map the surface
$ retrace trace open,connect,system,getenv -- ./sampleOne command, every libc touchpoint, JSON out.
AUDIENCES
retrace's actions compose differently for each audience. Pick your trail — every step is a command you can run today.
You reverse binaries without source. retrace maps every file, network, and process call in seconds — then lets you rewrite them mid-flight, jail them, and stream violations live to your collector.
$ retrace trace open,connect,system,getenv -- ./sampleOne command, every libc touchpoint, JSON out.
$ retrace-profile capture -o p.json -- ./sampleProfile the run, emit a jail config, re-run confined.
$ RETRACE_OTLP_ENDPOINT=http://collector:4318 retrace ...Denials stream as OTLP log records while it runs.
Error paths hide bugs but need fixtures nobody writes. Inject OOM, short I/O, latency, and mutated strings straight into the target — deterministic seeds, reproducible runs, clustered crash reports.
$ retrace fuzz malloc --rate 0.1 -- ./parser fileSame seed, same failures — every crash reproducible.
$ retrace-fuzz-report --config fuzz.json --seeds corpus/ -- ./targetClusters, reproducers, minimized corpus, drift oracle.
$ fuzz_str with @-template dictionariesTemplate lines expand at load; %1..%9 reference tokens.
Claims need ground truth. retrace grades what a binary SAYS it touches against kernel-layer evidence (strace/dtrace/ktrace/procmon/ETW) and against the declared set of its packaging manifest.
$ retrace-profile --libc t.json --kernel truth.jsonlibc_only/kernel_only counts: sub-libc access made visible.
$ retrace-profile --libc t.json --inside declared.jsonObserved-but-not-granted paths are headline violations.
$ retrace-profile diff baseline.json candidate.jsonDrift the baseline never saw — the supply-chain signal.
The 3am failure is environmental. Trace the exact libc calls of a misbehaving service — timings, env reads, DNS, connects — without redeploying instrumented builds.
$ retrace trace 'sqlite3_*' --time -- ./migrationp99/max per function, honest aggregates.
$ retrace trace getenv,getaddrinfo,connect -- ./svcConfig drift and resolver paths, visible.
$ retrace replay session.jsonSame calls, same mutations — bugs replay on your laptop.
retrace's root persona: the bug is in the boundary between your code and libc. Step through every call with arguments and returns, diff two runs, and pin the fault that only fires at 3am.
$ retrace trace open,malloc,getenv -- ./appDereferenced strings, sizes, returns — JSON per call.
$ retrace-diff run1.json run2.json --threshold 5Which calls appear, vanish, or slow down between builds.
$ RETRACE_REPLAY_OUT=run.rec ./flaky && RETRACE_REPLAY_IN=run.rec ./flakyThe time-seeded run records; the replay reproduces it exactly — or names its drift.