Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to symbolicate Mac OSX crash reports issued by Apple?

For iOS crash reports, it is sufficient to drag and drop the crash report to the Organizer.

Symbolicating iPhone App Crash Reports

But this method doesn't work for Mac OSX crash reports.

How can I symbolicate my Mac OSX crash report ?

Thanks !!

like image 445
Regis_AG Avatar asked Apr 30 '11 13:04

Regis_AG


People also ask

How do you Symbolicate a crash report?

Symbolicate the Crash Report in Xcode To symbolicate in Xcode, click the Device Logs button in the Devices and Simulators window, then drag and drop the crash report file into the list of device logs.

How do I view Apple crash reports?

You can access the crash log in macOS in two ways: Launch Finder, press Command + Shift + G, and type ~/Library/Logs/DiagnosticReports/ in the Go to Folder dialog box. Launch Console, and look for Diagnostic Reports located under ~/Library/Logs/.

Where are Mac crash reports stored?

However, the crash log files are stored in the user's ~/Library/Logs/DiagnosticReports/ folder. Mac OS X 10.5 (Leopard): Crash logs are stored in the same location, but multiple crashes are no longer written to a single file. Each crash is written to a uniquely named crash log file.


1 Answers

You can use the atos command to get the line number where the app crashed.

Heres a quick guide:

  1. Create a directory for your working files
  2. Open Xcode, select Window->Organizer, goto the Archive tab and find the version of your app that experienced the crash.
  3. Right click on the app archive and select "Show in Finder"
  4. Right click on the .xarchive, select "Show Contents" and find the AppName.dSYM directory and the app and copy them to your working folder
  5. Copy the stack trace to your working folder
  6. Open terminal and change to your working folder. An ls should show YourApp.app YourApp.app.dSYM stacktrace.txt
  7. Open your stack trace in TextEdit. Your going to need to find the Code Type from the header (system architecture - eg. X86-64) and the addresses of the crash. Search through the threads to find the one that crashed (it will say something like "Thread 2 Crashed") then find your objects. You need the two addresses (hex numbers) from that line to get the code line.
  8. Once you've got all the information you need to run the following in the terminal:

    atos -o YourApp.app/Contents/MacOS/YourApp -arch x86_64 -l [load-address] [address]

For example, heres an extract from a stacktrace:

Process:         MyApp [228] Path:            /Applications/MyApp.app/Contents/MacOS/MyApp Identifier:      uk.co.company.app Version:         1.0 (1) App Item ID:     774943227 App External ID: 218062633 Code Type:       X86-64 (Native) Parent Process:  launchd [154] Responsible:     MyApp [228] User ID:         501  Date/Time:       2013-12-17 10:20:45.816 +0100 OS Version:      Mac OS X 10.9 (13A603) Report Version:  11 Anonymous UUID:  7AA662B1-7696-A2C5-AF56-9D4BA2CE9515   Crashed Thread:  2  Exception Type:  EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000  <snip>  Thread 2 Crashed: 0   libsystem_kernel.dylib          0x00007fff8b95a866 __pthread_kill + 10 1   libsystem_pthread.dylib         0x00007fff8bf4f35c pthread_kill + 92 2   libsystem_c.dylib               0x00007fff87571bba abort + 125 3   libsystem_malloc.dylib          0x00007fff897ae093 free + 411 4   uk.co.company.app           0x0000000103580606 0x10356e000 + 75270 5   uk.co.company.app               0x00000001035803da 0x10356e000 + 74714 6   com.apple.Foundation            0x00007fff8d00970b __NSThread__main__ + 1318 7   libsystem_pthread.dylib         0x00007fff8bf4e899 _pthread_body + 138 8   libsystem_pthread.dylib         0x00007fff8bf4e72a _pthread_start + 137 9   libsystem_pthread.dylib         0x00007fff8bf52fc9 thread_start + 13 

I can see that the "Code Type" is x86_64, that Thread 2 crashed, and that on line 4 my code was running so we have the addresses we need. Using this information I run the following:

$ atos -o MyApp.app/Contents/MacOS/MyApp -arch x86_64 -l 0x10356e000 0x0000000103580606 

This returns:

got symbolicator for MyApp.app/Contents/MacOS/MyApp, base address 100000000 obj_free (in MyApp) (somefile.c:135) 

Telling me my app crashed at line 135 of somefile.c

like image 97
A.Badger Avatar answered Sep 24 '22 04:09

A.Badger