← All posts
SymbolicationCoredumpsArchitecture

From coredump to function @ file:line

Paul WaltonFounder, Corescope·

A raw coredump is a blob of register and stack bytes - useless on its own. Turning it into a backtrace you can read is the whole game. Here is the path it takes, and why every clever step lives on the server, not the device.

The pipeline

  1. Capture. On fault, the SDK saves the coredump and reset reason, then ships them as opaque chunks after reboot - each tagged with the firmware's build id.

  2. Reassemble. The worker stitches the chunks back into a byte-perfect coredump and de-duplicates repeats from the same event.

  3. Symbolicate. Using the ELF uploaded for that exact build id, addresses become function @ file:line. No build id match is a loud state, never a silent guess.

  4. Group. Identical faults collapse into one Issue with occurrences, affected devices and breadcrumbs - so ten thousand crashes read as one bug.

Why server-side

The device should do as little as possible: capture, tag, ship, forget. Symbolication needs the ELF, toolchain and grouping logic - none of which belong on a constrained MCU. Keeping the ingest path dumb and stateless is what makes watching a large fleet practical.

The same contract works whether the device sends a full coredump or just a handful of stack addresses - the server resolves both into the same Issue.

Want this for your fleet?

Corescope turns field crashes into symbolicated Issues. Join the founding fleet for early access.

Request early access