QA:Crash Reporting and Analysis
Camino uses Google Breakpad for its crash-reporting client and Mozilla Crash Stats for the reporting server.
Contents
Camino Symbols
Symbol Indices: Camino-2.0b4-i386-2009091516-symbols.txt Camino-2.0b4-ppc-2009091516-symbols.txt
Symbol Files: 8baef9 51 391 10594
- Address, length in bytes (in hex) of the machine code, line number, file number
Breakpad Symbol File documentation
By way of comparison, and for easy reference, Firefox symbol indices are firefox-3.6.5pre-Darwin-20100510033614-symbols.txt.
Plug-ins and Hacks
Mac Flash Identifiers on wiki.mozilla.org contains a table mapping Flash module IDs to Flash versions.
QA:1Password Versions contains a similar table mapping 1Password module IDs to 1Password versions.
Unsymbolized Frames on 10.4.11 PPC
10.4.11 PPC has a very, very high instance of unsymbolized frames due to non-matching Module IDs. It's a pain to be manually resymbolizing them constantly when examining new topcrashers, so QA:Resymbolized Frames contains some common resymbolized frames.
OS Symbols
N.B. Even if a crash report has the same build as the OS symbols, we have seen cases where one or more (even all) of the OS binaries has a different hash/Debug Identifier and thus its frames are not symbolized.
Mac OS X 10.4
- Mac OS X 10.4.11 8S165 (PPC, no Security Update 2009-002)
- Mac OS X 10.4.11 8S165 (PPC, includes Security Update 2009-002)
- Mac OS X 10.4.11 8S2167 (Universal, includes Security Update 2009-002; PPC half should be equivalent to 8S167[?])
- Mac OS X 10.4.11 8S2167 (Universal, includes Security Update 2009-003)
- Mac OS X 10.4.11 8S165 (PPC, includes Safari 4.0.3)
- Mac OS X 10.4.11 8S165 (PPC, includes QuickTime 7.6.4)
- Mac OS X 10.4.11 8S165 (PPC, includes Java for Mac OS X 10.4, Release 9)
- Mac OS X 10.4.11 8S165 (PPC, includes Security Update 2009-005)
- Mac OS X 10.4.11 8S2167 (Universal, includes Security Update 2009-005 and QuickTime 7.6.4)
- Mac OS X 10.4.11 8S2167 (Universal, unknown)
Mac OS X 10.5
- Mac OS X 10.5 9A581 (Universal)
- Mac OS X 10.5.1 9B18 (Universal)
- Mac OS X 10.5.2 9C31 (Universal)
- Mac OS X 10.5.3 9D34 (Universal)
- Mac OS X 10.5.4 9E17 (Universal)
- Mac OS X 10.5.5 9F33 (Universal)
- Mac OS X 10.5.6 9G55 (Universal)
- Mac OS X 10.5.6 9G55 (Universal, includes Security Update 2009-01; old symbol list)
- Mac OS X 10.5.7 9J61 (Universal; old symbol list)
- Mac OS X 10.5.7 9J61 (Universal)
- Mac OS X 10.5.7 9J61 (Universal, includes QuickTime 7.6.2)
- Mac OS X 10.5.8 9L30 (Universal)
- Mac OS X 10.5.8 9L31a (Universal; module IDs identical with/without Security Update 2009-004)
- Mac OS X 10.5.8 9L30 (Universal, includes Java Update 5, Security Update 2009-005, and QuickTime 7.6.4)
- Mac OS X 10.5.8 9L30 (Universal; cl Oct 2)
- Mac OS X 10.5.8 9L31a (Universal, includes Java Update 5, Security Update 2009-005, and QuickTime 7.6.4)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2009-006)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2009-006)
- Mac OS X 10.5.8 9L30 (Universal, includes Safari 4.0.4)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 4.0.4)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2009-006 and Safari 4.0.4 from cl)
- Mac OS X 10.5.8 9L30 (Universal, includes Java Update 6)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-001)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-001)
- Mac OS X 10.5.8 9L30 (Universal, includes Safari 4.0.5)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 4.0.5)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-002 and QuickTime 7.6.6)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-002 and QuickTime 7.6.6)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-003)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-003)
- Mac OS X 10.5.8 9L30 (Universal, includes Java Update 7)
- Mac OS X 10.5.8 9L31a (Universal, includes Java Update 7)
- Mac OS X 10.5.8 9L31a (Universal, includes Java Update 7)
- Mac OS X 10.5.8 9L30 (Universal, includes Safari 5; 100% identical to 10.5.8 9L30 with Java Update 7)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-004)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-004)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-005)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-005)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2010-007 and Java Update 8)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2010-007 and Java Update 8)
- Mac OS X 10.5.8 9L30 (Universal, includes Safari 5.0.3)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 5.0.3)
- Mac OS X 10.5.8 9L30 (Universal, includes QuickTime 7.6.9)
- Mac OS X 10.5.8 9L31a (Universal, includes QuickTime 7.6.9)
- Mac OS X 10.5.8 9L30 (Universal, includes Safari 5.0.4 and Java Update 9)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 5.0.4 and Java Update 9)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2011-001)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2011-001)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2011-002 and Safari 5.0.5)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2011-002)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 5.0.5)
- Mac OS X 10.5.8 9L30 (Universal, includes Security Update 2011-004)
- Mac OS X 10.5.8 9L31a (Universal, includes Security Update 2011-004 and Java Update 10)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari 5.0.6)
- Mac OS X 10.5.8 9L31a (Universal, includes Safari QuickTime 7.7)
Mac OS X 10.6
- Mac OS X 10.6 10A432 (Universal 32-bit)
- Mac OS X 10.6.1 10B504 (Universal 32-bit)
- Mac OS X 10.6.2 10C540 (Universal 32-bit)
- Mac OS X 10.6.2 10C540 (Universal 32-bit, includes Java Update 1)
- Mac OS X 10.6.2 10C540 (Universal 32-bit, includes Security Update 2010-001)
- Mac OS X 10.6.2 10C540 (Universal 32-bit, includes Safari 4.0.5)
- Mac OS X 10.6.3 10D573 (Universal 32-bit)
- Mac OS X 10.6.3 10D573 (Universal 32-bit, includes Security Update 2010-003)
- Mac OS X 10.6.3 10D573 (Universal 32-bit, includes Java Update 2)
- Mac OS X 10.6.4 10F569 (Universal 32-bit)
- Mac OS X 10.6.4 10F569 (Universal 32-bit, includes Security Update 2010-005)
- Mac OS X 10.6.4 10F569 (Universal 32-bit, includes Security Update 2010-006)
- Mac OS X 10.6.5 10H574 (Universal 32-bit)
- Mac OS X 10.6.6 10J567 (Universal 32-bit)
- Mac OS X 10.6.6 10J567 (Universal 32-bit)
- Mac OS X 10.6.6 10J567 (Universal 32-bit, includes Safari 5.0.4 and Java Update 4)
- Mac OS X 10.6.7 10J869 (Universal 32-bit, includes Security Update 2011-001)
- Mac OS X 10.6.8 10K540 (Universal 32-bit, includes Security Update 2011-004)
- Mac OS X 10.6.8 10K549 (Universal 32-bit, possibly including Security Update 2011-005)
- Mac OS X 10.6.8 10K549 (Universal 32-bit, including Security Update 2011-006)
- Mac OS X 10.6.8 10K549 (Universal 32-bit, including Security Update 2012-001 v1.0)
- Mac OS X 10.6.8 10K549 (Universal 32-bit, including Security Update 2012-001 v1.1)
- Mac OS X 10.6.8 10K549 (Universal 32-bit, including Security Update 2012-001 v1.1)
Mac OS X 10.7
- Mac OS X 10.7 (32-bit)
- Mac OS X 10.7.1 11B26 (32-bit)
- Mac OS X 10.7.2 11C74 (32-bit)
- Mac OS X 10.7.3 11D50 (32-bit)
- Mac OS X 10.7.3 11D50b (32-bit)
Generating Symbols for Mac OS X Libraries
After each relevant software update, we generate Mac OS X symbols, often from a couple of different machines in an attempt to combat the "many Debug Identifiers per library per OS version and build number" issue.
generate_macosx_symbols
drives the symbol generation process, using lists of libraries (one per major OS version) from which to extract symbols, and Camino’s custom symbolstore.py
, which includes support both for generating symbol files for Mac OS X libraries and storing them in non-read-only locations and for binaries with spaces in their names.
Call generate_macosx_symbols
with three arguments (path to Camino’s custom symbolstore.py
, path to the dump_syms
binary, and an output path) and then pass a list of libraries to read via stdin
(see below for an example invocation on 10.5 wrapped as a convenience script).
generate_macosx_symbols
requires Ruby 1.8.6 or higher (standard on Mac OS X 10.5), and use with a non-system Ruby requires editing the script to select the appropriate interpreter path. (It may be possible to convince the system Ruby on Mac OS X 10.4 to work by changing readpartial
to read
and ensuring no warning messages will be generated, e.g. by missing architectures.)
Lists of libraries are generated on new OS versions using dependency_list_generator
, Mozilla applications, and a list of extra libraries and plug-ins
that are often loaded but not linked against by applications.
Symbol archives are then uploaded to symbols.mozilla.org using a wrapper around upload_symbols.sh
(note this script is not spaces-in-paths-friendly). Care should be taken to ensure that the symbol manifest (Mac_OS_X-10_5_8-9L31a-symbols.txt
) has a unique filename in order to ensure all symbol files can be referenced afterwards (and removed once their OS is no longer supported by any shipping product); for minor version updates this is usually handled “automatically” by the version number and build number, but updates to QuickTime, Safari, Java, and Security Updates typically introduce new copies of libraries without incrementing the OS build number, so the manifest inside the zip file should manually be renamed with additional identifiers.
Sample invocation
./ossymbols.sh
ossymbols.sh:
#!/bin/sh SRCDIR_PATH="/Users/username/Camino/dev/trunk/mozilla/camino" DUMP_SYMS_PATH="/Users/username/Camino/dev/trunk/CaminoStaticUniTrunk/i386/camino/google-breakpad/src/tools/mac/dump_syms/build/Release/dump_syms" OUTPUT_DIR="$SRCDIR_PATH/../.." LIBRARIES_LIST_PATH="$SRCDIR_PATH/tools/os-symbol-generation/libraries_10_5.txt" "$SRCDIR_PATH/tools/os-symbol-generation/generate_macosx_symbols" \ "$SRCDIR_PATH/scripts/symbolstore.py" \ "$DUMP_SYMS_PATH" "$OUTPUT_DIR" < "$LIBRARIES_LIST_PATH"
For Mac OS X 10.5, 10.6, and 10.7, there's a self-contained AppleScript wrapper app that automates the entire symbol generation process; this is useful if you need to get symbols from a user who is not familiar with this process.