Keep It Simple Stupid

Xcode's Instruments doesn't show symbolicated stacktraces

| comments

Xcode’s Instruments is a very useful tool to profile and analyze iOS applications. For example, you can use the Time Profiler instrument to figure out which functions use the most CPU time: you see all the captured stacktraces with the number of samples for each function in the bottom half of the Instruments window. The list is supposed to show symbolicated stacktraces, that is actual function names like UIViewController.viewDidLoad() instead of their addresses in memory like 0x10c100f87, and this works most of the time until you change something and it breaks.

This happened to me a few times and Time Profiler stopped showing symbols. I managed to fix it by going to Settings (Cmd+,) > Symbols > “+” under the Search Paths for dSYMs list and adding the path to the build directory of my project, which is typically of a form ~/Library/Developer/Xcode/DerivedData/projectname-identifier/Build/Products/Release-iphoneos/. Then I right-clicked on a raw address from my binary in the list (module names were listed to the right of the addresses), selected “Load dSYM” and it did the trick! Maybe this tip will help someone too.

Now, to find the path to add, go the Xcode project, open the Report navigator (Cmd+9), select the build log for profiling, click on “All Messages” in the main pane, and in almost all of the steps you’ll see the products directory, e.g. a step at the end “Sign” — if you click the expand button on the right of this line, more information will be revealed, where you’ll see the build products path:

CodeSign /Users/user/Library/Developer/Xcode/DerivedData/projectname-identifier/Build/Products/Release-iphoneos/