Symbolicating iPhone App Crash Reports

how to symbolicate crash log xcode 11
symbolicate crash log online
symbolicate ips file ios
memory trace upload was successful iphone
testflight crash reports
thread 0 crashed with arm thread state (64-bit)
ios dsym crash
app store connect crash reports

I'm looking to try and symbolicate my iPhone app's crash reports.

I retrieved the crash reports from iTunes Connect. I have the application binary that I submitted to the App Store and I have the dSYM file that was generated as part of the build.

I have all of these files together inside a single directory that is indexed by spotlight.

What now?

I have tried invoking:

symbolicatecrash crashreport.crash myApp.app.dSYM

and it just outputs the same text that is in the crash report to start with, not symbolicated.

Am I doing something wrong?

Steps to analyze crash report from apple:

  1. Copy the release .app file which was pushed to the appstore, the .dSYM file that was created at the time of release and the crash report receive from APPLE into a FOLDER.

  2. OPEN terminal application and go to the folder created above (using cd command)

  3. Run atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. The memory location should be the one at which the app crashed as per the report.

Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

This would show you the exact line, method name which resulted in crash.

Ex: [classname functionName:]; -510

Symbolicating IPA

if we use IPA for symbolicating - just rename the extention .ipa with .zip , extract it then we can get a Payload Folder which contain app. In this case we don't need .dSYM file.

Note

This can only work if the app binary does not have symbols stripped. By default release builds stripped the symbols. We can change it in project build settings "Strip Debug Symbols During Copy" to NO.

More details see this post

Understanding and Analyzing Application Crash Reports, Ok I realised that you can do this: In Xcode > Window > Devices , select a connected iPhone/iPad/etc top left. View Device Logs; All Logs. Crash reports retrieved from a device are unsymbolicatedand will need to be symbolicated using Xcode. Xcode uses the dSYMfile associated with your application binary to replace each address in the backtracewith its originating location in your source code. The result is a symbolicated crash report.

After reading all these answers here in order to symbolicate a crash log (and finally succeeding) I think there are some points missing here that are really important in order to determine why the invocation of symbolicatecrash does not produce a symbolicated output.

There are 3 assets that have to fit together when symbolicating a crash log:

  1. The crash log file itself (i.e. example.crash), either exported from XCode's organizer or received from iTunes Connect.
  2. The .app package (i.e. example.app) that itself contains the app binary belonging to the crash log. If you have an .ipa package (i.e. example.ipa) then you can extract the .app package by unzipping the .ipa package (i.e. unzip example.ipa). Afterwards the .app package resides in the extracted Payload/ folder.
  3. The .dSYM package containing the debug symbols (i.e. example.app.dSYM)

Before starting symbolication you should check if all those artifacts match, which means that the crash log belongs to the binary you have and that the debug symbols are the ones produced during the build of that binary.

Each binary is referred by a UUID that can be seen in the crash log file:

...
Binary Images:
0xe1000 -    0x1f0fff +example armv7  <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff  dyld armv7s  <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...

In this extract the crash log belongs to an app binary image named example.app/example with UUID aa5e633efda8346cab92b01320043dc3.

You can check the UUID of the binary package you have with dwarfdump:

dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Afterwards you should check if the debug symbols you have also belong to that binary:

dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

In this example all assets fit together and you should be able to symbolicate your stacktrace.

Proceeding to the symbolicatecrash script:

In Xcode 8.3 you should be able to invoke the script via

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

If it is not there you may run a find . -name symbolicatecrash in your Xcode.app directory to find it.

As you can see there are no more parameters given. So the script has to find your application binary and debug symbols by running a spotlight search. It searches the debug symbols with a specific index called com_apple_xcode_dsym_uuids. You can do this search yourself:

mdfind 'com_apple_xcode_dsym_uuids = *'

resp.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

The first spotlight invocation gives you all indexed dSYM packages and the second one gives you the .dSYM packages with a specific UUID. If spotlight does not find your .dSYM package then symbolicatecrash will neither. If you do all this stuff e.g. in a subfolder of your ~/Desktop spotlight should be able to find everything.

If symbolicatecrash finds your .dSYM package there should be a line like the following in symbolicate.log:

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

For finding your .app package a spotlight search like the following is invoked by symbolicatecrash:

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"

If symbolicatecrash finds your .app package there should be the following extract in symbolicate.log:

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH

If all those resources are found by symbolicatecrash it should print out the symbolicated version of your crash log.

If not you can pass in your dSYM and .app files directly.

symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log

Note: The symbolicated backtrace will be output to terminal, not symbolicate.log.

Symbolicating iOS Crash Reports and Logs, I once found that a deprecated UIKit API, which works fine in iOS simulator, failed miserably in a release build. How to get crash reports #. Once  To diagnose an app issue using a crash report, you need a fully symbolicated or partially symbolicated crash report. An unsymbolicated crash report is rarely useful. A fully symbolicated crash report has function names on every frame of the backtrace, instead of hexadecimal memory addresses.

With the latest version of Xcode (3.2.2), you can drag and drop any crash reports into the Device Logs section of the Xcode Organiser and they will automatically by symbolicated for you. I think this works best if you built that version of the App using Build & Archive (also part of Xcode 3.2.2)

How to symbolicate crash log Xcode?, A thing that scares the developers is a CRASH and what scares them more is NOT being able to re-symbolicate the crash reports and the same  symbolicatecrash. #symbolicatecrash is a tool that’s available with Xcode. If you have access to the .crash file, you can run #symbolicatecrash against the file with the dSYM and it will output the symbolicated crash report. The location of #symbolicatecrash varies depending on the version of Xcode.

I did this successfully, using the following steps.

Step 1: Create a folder in desktop, I give name it to "CrashReport" and put three files ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") in it.

Step 2: Open Finder and go to Applications, where you will find the Xcode application, right click on this and Click "Show Package Contents", after this follow this simple path. "Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKit.framework->Versions->A->Resources"

OR

"Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKitBase.framework->Versions->A->Resources"

OR

For Xcode 6 and above the path is Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

Where you find "symbolicatecrash" file, copy this and paste it to "CrashReport" folder.

Step 3: launch the terminal, run these 3 Command

  1. cd /Users/mac38/Desktop/CrashReport and press Enter button

  2. export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" and press Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM and press Enter Now its Done.. (NOTE: versions around 6.4 or later do not have the -A option -- just leave it out).

Manually symbolicate crash reports, Today, we'll talk about manually symbolicating iOS and OS X application “crash reports.” Why? When you hear about a crash in one of your  If you're building an ios app and for some reason there's a bug you're probably going to get a crash report. Here are the steps to re-symbolicate the report because apple doesn't make it easy from outside xcode.

Steps to symbolicate a crash report automatically using XCode:

UPDATED FOR XCODE 9

  1. Connect any iOS device to your Mac (yes a physical one, yes I know this is stupid)

  2. Choose "Devices" from the "Window" menu

  3. Click your device on the left and VIEW DEVICE LOGS on the right

  4. Wait. It might take a minute to show up. Maybe doing Command-A then Delete will speed this up.

  5. Critical undocumented step: rename the crash report that you got from iTunesConnect from .txt extension to .crash extension

  6. Drag the crash report into that area on the left

And then Xcode will symbolicate the crash report and display the results.

Source: https://developer.apple.com/library/ios/technotes/tn2151/_index.html

Symbolicating iOS📱 Crash👺 Reports - The Swift Blog, You can symbolicate a crash log with Xcode 9 fairly easy. Record the iOS Simulator to GIFRocketSim makes it really easy to record the iOS  Using symbolicatecrashwill give entire crash report translated into meaningful terms and here is how to use it. 2. Run. $ < symbolicatecrash file path> <.crash file path> <.app file path>. 3

Debugging: symbolicating crash reports manually (stack , Discover how symbolication helps generate better stack traces in crash reports. Learn how Instabug makes symbolicating crash reports easier. B4i Tutorial Symbolicating a crash report B4i Tutorial Symbolicating app crash reports Other B4i v2.0 BETA has been released Other Hosted Mac Builder Announcements B4i Tutorial Local Mac Builder Installation

Symbolicate crashlogs with Xcode 9 and Bitcode, The symbol files from a real device with the same kind as the testing device (iPad or iPhone), running the exact same iOS version. (Eg. iOS 10.3.1)  Symbolicating iOS Crash Logs. During iPhone app beta testing, and even when you have apps on the App Store, it’s often difficult to reproduce crashes reported from users. Luckily, iOS devices keep logs of each crash 1 and can even tell you the exact line of code that caused the problem. Let’s take a look at a crash log for MyApp:

Using Symbolication to Get Better iOS Crash Reports, ios - with - Symbolicating iPhone App Crash Reports Steps to symbolicate a crash report automatically using XCode:. Choose "Devices" from the "Window" menu It might take a Preconditions. All the xccrashpoint packages - (from Xcode Organizer. The Script. When you run the script, you'll get 2

Comments
  • You can also see my answer at iPhone SDK : Where is symbolicatecrash.sh located?. I list out where to find the symbolicatecrash command, how to use it, and how to find the dSYM file needed to do symbolication.
  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
  • I've created a script which may help: github.com/amleszk/scripts/blob/master/…
  • If anyone is wondering where can you get *.app, *.dSYM & crash logs to being with then look at my answer below.
  • You can refer this : medium.com/@Mrugraj/crash-re-symbolication-5c28d3a3a883
  • Just a tip to @NaveenShan answer, a real-world example would do this atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c and you get -[HUDWindow sizedHUDBackground] (in myApp) + 1197
  • Which address do you use, though? The logs have two columns of addresses after each function, and the second has a + and an offset of some kind. Like 0x332da010 0x332d9000 + 4112.
  • @OscarGoldman The second address eg:- In 0x332da010 0x332d9000 + 4112. use 0x332d9000.
  • Also, if used without an address, it allow you to analyse multiple locations by submitting them one by one.
  • There are multiple issues with this answer: 1. This can only work if the app binary does not have symbols stripped. And release builds by default do have them stripped. 2. Even if the symbols are available, it will never ever show the line number. Only symbolicating with the dSYM will provide that. 3. You cannot simply use the memory address shown in the stack trace, the address has to be normalized against the start memory address the app is loaded into. More details see this answer: stackoverflow.com/questions/13574933/…
  • i can find all the files however i get this, and no symbolicated output No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
  • This was really helpful! In my case the .app file has different name than the executable name (I do not know why but it is built this way by Xcode). After renaming .app file in the XCode archive, the symbolicating did work.
  • This is a great explanation and should be the top answer IMO, thank you. Note that you may have to set your DEVELOPER_DIR environment variable if the script complains about it like so: export DEVELOPER_DIR=`xcode-select --print-path` . I added this line to my ~/.bash_profile. See stackoverflow.com/q/11682789/350761