Xcode debugger doesn't print objects and shows nil, when they aren't

Xcode shows an error when trying to print an object with po <objectName>, but only for one project.

Screenshot

error: Couldn't materialize struct: size of variable <varName> disagrees with the ValueObject's size Errored out in Execute, couldn't PrepareToExecuteJITExpression

The Xcode debugger also shows ALL objects as nil (self excluded), when they aren't (NSLog shows correct output, as seen in the image). I don't know what's wrong with the project. Every other project works fine.

Any idea what it could be? (Cleaning the project had no effect.)


Are you sure you are not in "Release mode"?

If you want to see variable values you have to be in "Debug mode" (click on your project name on the top left corner near start/stop buttons, then "Edit scheme...", then "Run" settings, then "Info" tab, then "Build Configuration". Here set "Debug". If it was on "Release" that's the matter you saw all nils).


I've set "Optimization Level" for Debug configuration to "None" and it solved problem.

  • Go to project Build settings
  • Search Debug
  • Under Apple Clang - Code Generation check Optimization Level
  • Set Debug to None [-OO]

After that, you will be able to see variable values in the debug area or console. enter image description here


Make sure that Address Sanitizer is turned off in your Scheme settings. The Address Sanitizer does not work well with the debugger.

  1. Go to Edit Scheme (Product >> Scheme >> Edit Scheme), choose Run, and go to the Diagnostics tab.
  2. Make sure "Enable Address Sanitizer" is off.

enter image description here


It seems everyone has their own solution.

For me, I use Objective-C and Swift at the same time.

First of all, go to TARGETS -> Build Settings and search the code generation

You’ll find Apple LLVM 6.0 and Swift Compiler

Change their Optimization Level all to None, then Debug, you may find the value not nil

Amazingly once you can see the value, you solve this problem permanently, then you can change the Optimization Level to it used to be.