

Symbol information contains the names of the functions corresponding to a given range of addresses as well as the source files they come from and the line numbers a given instruction corresponds to. The unwinding information is a set of instructions that describe how to find the various frames in the stack given an instruction pointer. To extract a meaningful stack trace from a minidump two more things are needed: unwinding information and symbols. See the picture below for an example of how crashes are grouped: When a new crash is spotted we assign it a bug and start working on it.

The reports are then clustered based on the top method name of the stack trace of the crashing thread. Once the user submits a crash report, we have a server-side component – called Socorro – that processes it and extracts a stack trace from the minidump. Breakpad originated at Google for their software (Picasa, Google Earth, etc…) but we have forked, heavily modified for our purposes and recently partly rewrote it in Rust. The minidump format was originally designed at Microsoft and Windows has a native way of writing out minidumps. If you’re familiar with core dumps, then minidumps are essentially a smaller version of them. This includes the contents of the processor’s registers as well as data from the stacks of every thread. This report contains, among other things, a minidump: a small snapshot of the process memory at the time it crashed. This effort quickly became an example of good synergies between FOSS projects.Įvery time Firefox crashes, the user can send us a crash report which we use to analyze the problem and hopefully fix it: Roughly a year ago at Mozilla we started an effort to improve Firefox stability on Linux.
