You're on call. A production C++ service just crashed — no logs, no stack trace, just a dead process and maybe a core file.
This guide gives you a clear, repeatable workflow to diagnose any crash, even when you're missing debug symbols or working with a stripped legacy binary. Whether you have a core file, a symbol file, an unstripped build, or nothing at all, you will always know the next step.
Why This Matters
Debugging crashes in legacy C++ systems is notoriously difficult because:
Deployments often strip symbols
Core dumps are disabled in production
Build IDs don’t match
ASLR shifts memory layouts
Frame pointers are omitted
Systemd overrides ulimit settings
This workflow eliminates guesswork and gives you a deterministic path from crash to root cause .
Crash Debugging Decision Map
CRASH | v HAVE CORE FILE? |-- No --> Enable cores (Path B) → Reproduce crash | |-- Yes (Path A) | v HAVE DEBUG SYMBOLS? |-- Yes --> Debug now (A4) | |-- No | v HAVE SYMBOL FILE?…