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.
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
checkOptimization Level
- Set
Debug
toNone [-OO]
After that, you will be able to see variable values in the debug area or console.
Make sure that Address Sanitizer is turned off in your Scheme settings. The Address Sanitizer does not work well with the debugger.
- Go to Edit Scheme (Product >> Scheme >> Edit Scheme), choose Run, and go to the Diagnostics tab.
- Make sure "Enable Address Sanitizer" is off.
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.