Quick answer: An unsymbolicated stack trace is a list of memory addresses, nearly useless for debugging; a symbolicated one maps those addresses to real function names and line numbers, making the trace readable.

When you get a crash's stack trace, it can be readable or it can be a wall of hex, the difference is symbolication. This distinction determines whether a trace is useful at all. Here's what symbolicated versus unsymbolicated means.

What an Unsymbolicated Stack Trace Is

An unsymbolicated stack trace is the raw form: a list of memory addresses (hex numbers) showing where the program was when it crashed. Without symbolication, those addresses are meaningless to you, you can't tell which function or line each corresponds to, so the trace is nearly useless for debugging.

Compiled and optimized builds produce unsymbolicated traces by default, because the human-readable names aren't in the shipped binary. An unsymbolicated trace tells you a crash happened and its rough shape, but not where in your code, which is the part you actually need.

What a Symbolicated Stack Trace Is

A symbolicated stack trace has had those memory addresses mapped back to real function names and line numbers in your source code, using debug symbols. The result is a readable trace: you can see the exact functions and lines in the call chain, often revealing the cause directly.

Symbolication is what makes a trace usable. Bugnet symbolicates stack traces, so the traces you see name real functions and lines, not hex addresses. A symbolicated trace turns 'crashed at 0x7f3a...' into 'crashed at PlayerController.Update, line 142', which you can actually act on.

Why It Matters for Debugging

The difference is decisive: an unsymbolicated trace is gibberish, a symbolicated one is a clue. Debugging from a stack trace requires symbolication, otherwise you can't find where the crash happened in your code. This is why good crash reporting symbolicates traces for you, so every crash arrives readable.

Bugnet handles symbolication, so you don't ship a crash reporter that hands you hex. So ensure your crash traces are symbolicated, it's the difference between a crash you can investigate and one you can't, and it's why symbolicated stack traces are a foundational feature of usable crash reporting.

An unsymbolicated trace is raw memory addresses (useless for debugging); a symbolicated one maps them to real function names and lines (readable). Symbolication turns a crash trace from gibberish into a usable clue.