Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You're hitting a bug in the lldb in Xcode 4.5.x with its volatile register list on i386.</p> <p>Registers fall in to two classes: volatile and non-volatile (or callee-saved). When a function calls another function, all of the "volatile" registers may have their contents overwritten. All non-volatile/callee saved registers will be preserved by the called function (callee function) before they are reused, and their previous values restored before returning.</p> <p>Sometimes the debug info will say that a variable is stored in a volatile register. If that function is in the middle of your stack and you want to examine that variable, the debugger cannot reconstruct that register's value -- it is lost. gdb would simply copy the volatile register's value up to the middle of the stack and print the variable with a (potentially) bogus value, leading developers to be very confused.</p> <p>lldb knows the difference between volatile and non-volatile registers and won't let volatile registers be reused in the middle of a stack like that -- they'll say that the register value is unavailable instead.</p> <p>Unfortunately in this case, you're seeing lldb claim it cannot reconstruct variables that are available. They are mis-categorized as volatile when they should be non-volatile. Without doing a lot of assembly-language inspection, this is not going to be easy for you to work around. The only solution here is to resume execution until you're back in that function again (i.e. it is now frame 0) and then all of the register values will be correctly marked as available.</p> <p>This is fixed in Xcode 5, released September 2013.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload