Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Atos cannot get symbols from dSYM of archived application

I have a crash report from BugSense, so I have information on the memory location of crashes but they are not symbolicated. Also Bug Sense does not send traditional crash reports but still gives me a bugtrace. So I am trying to use Atos to get the exact location of my crashes. I have archived the app in XCode 4 and used that version to submit to the app store, so I have a dSYM file. I have run the following code:

atos -arch armv7 -o MyApp.app.dSYM 0x001057e9 

However, instead of getting the proper output, I am receiving an error:

atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7 

Any suggestions as to why this might be happening? I am not stripping debug symbols from the app.

like image 873
Jason Avatar asked Oct 06 '11 14:10

Jason


People also ask

Where are dSYM files stored?

Your app's dSYM files are stored in Xcode's dSYM archive path folder. This is the folder where the iOS agent gets the dSYM files that are used to symbolicate your crash reports. New Relic provides a post-build script as part of the iOS agent's install process.

What is the dSYM file?

A dSYM file is an ELF file that contains DWARF (debugging with attributed record formats) debug information for your application. DWARF is a debugging file format that supports source-level debugging.


2 Answers

To properly get symbols from your archived app's dSYM file and get useful information from your BugSense crash reports (or any other crash reports for that matter):

  1. Copy the stack trace from BugSense into TextEdit or any other text editor. Make sure to use the "clipboard" icon, rather than simply copying the text. Otherwise you will not get the actual memory locations of the stack trace, which are necessary to look up the references using atos and symbolicate your stack trace.
  2. Open XCode and go to the Organizer
  3. Find your archive and right-click it, go to open it in the finder.
  4. Navigate to the directory of the archive, usually ~/Library/Developer/XCode/Archives/YYYY-MM-DD/
  5. Go into the specific archive, and then the dSYMs folder
  6. You will see the file MyApp.app.dSYM and you may think, this is the file that I should run atos against! This is incorrect. It is actually another package! cd into this package, into the folder: MyApp.app.dSYM/Contents/Resources/DWARF and you will find another file simply called MyApp. This is the actual dSYM file.
  7. Run atos -arch armv7 -o MyApp 0x0000000 (or whatever the memory address is) to find the location of your error, or simply atos -arch armv7 -o MyApp to enter interactive mode.
like image 199
Jason Avatar answered Oct 06 '22 00:10

Jason


You have to get the right address. You can use the solution above but you must use hex math to get the right memory address. slide + stack address - load address.

like image 45
Greg Hawk Avatar answered Oct 05 '22 22:10

Greg Hawk