Usage
You can pass either the .app or the .dSYM file to the script.
symbolication yourapp.app.dSYM yourapp.crash > symbolicated.crash
or
symbolication yourapp.app yourapp.crash > symbolicated.crash
Symblocation only supports iOS based crash logs due to the use of the iOS version of gdb. With some simple tweaks, symbolication of all crash logs should be possible.
Symbolication will only symbolicate symbols native to your app. The xcode tools should be used to symbolicate the Apple symbols (or you can choose to not-symbolicate them, often where an app crashed in your code is more relevant to debugging).
When looking for a .dSYM, gdb does not care about the file name. If a non-matching .dSYM file is in the same directory, gdb may try and use it and provide inaccurate results. Double check your results and that you are using the right dSYM file.
If you pass the .dSYM the matching .app file MUST be in the same directory for any symbols to be parsed.
If you pass the .app you can still parse some symbols if you don't have the .dSYM file. However, gdb will look for a .dSYM file in the same directory as the .app and if it finds it you will get the same results as if you passed the .dSYM.
The script will output the symbolicated log file which can then be redirected to a new file or viewed in the console.
EDIT :: XCode 4.3
You will want to follow the same steps as outlined in the original answer (below) with a few exceptions.
First, you need to fix the Xcode path. Open a terminal and run:
/usr/bin/xcode-select -print-path
If it displays "/Developer" or anything but "/Applications/Xcode.app/Contents/Developer/" then it is wrong. To fix this run the command:
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/
You can now run all the steps below, with the exception that the symbolicatecrash
command is in a new spot (again). This is because Xcode now installs as an app. To find symbolicatecrash
run this from the terminal:
find /Applications/Xcode.app -name symbolicatecrash -type f
This should return:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
Before running symbolicatecrash
you may wish to go to this directory like:
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
Original Answer :: Xcode < 4.3
Path for symbolicatecrash
Search from a terminal using:
find /Developer -name symbolicatecrash -type f
For me this returned:
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
How to Manually Symbolicate a Crash Log
Run the symbolicatecrash
command with the crash log as the first argument and your dSYM file as your second argument. Note that if you will be running symbolicatecrash
from the current directory that you MUST put ./
in front like ./symbolicatecrash
unless your PATH environment variable includes the directory that the command resides in.
I changed to the directory that had the symbolicatecrash
command in it first (note: will be different for Xcode 4.3, see top):
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
Then I executed the following command:
./symbolicatecrash /somePath/MyCrashLogFile.crash /somePath/MyAppName.app.dSYM
How to Find the dSYM file:
You must have the archive that was used to create the build with the crash to get the dSYM file.
Here are the steps:
- Right click (or ctrl click) the archive from organizer and choose "Show in Finder".
- From the xcarchive file in finder, right click (or ctrl click) this file and choose "Show Package Contents". You will then see a "dSYMs" folder.
- Inside the "dSYMs" folder you will find "YourAppName.app.dSYM" file that you will need to symbolicate files.