Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically get all frame variables in objective-c

Tags:

objective-c

I'm trying to create my own custom assert. However, I would like my assertion to automatically include all of the relevant variables. This seems really basic to me, and I've searched around for about an hour but I can't seem to find a way get access to all the relevant stack frame variables. Does anyone know how to get these variables?

FYI - I don't need to access the variables in the debugger, I need to access them programmatically. I would like to upload them along with the crash report to give me more information about the crash. I also know that I can print them out manually...that is exactly what I'm looking to avoid.

like image 418
Aaron Hayman Avatar asked May 05 '26 12:05

Aaron Hayman


1 Answers

You are basically asking to re-invent a good sized chunk of the debugger.

Without symbols, there isn't anything you can interrogate to figure out the layout of the local frame. Even with symbols, it is quite likely that the optimizer will have stomped on any local variables as the optimizer will re-use stack slots at whim once it determines the variable is no longer needed within the frame.

Note that many crashes won't be able to be caught at all or, if caught, the frame within which they occurred will have long since been destroyed.

Since you mention that you are creating a custom assertion, it sounds like you really aren't looking to introspect crashes as much as dump a snap of the local frame when you programatically detect that things have gone off the rails. While there really isn't a means of automatically reporting on local stack state, you could do something like:

{ ... some function ....
  ... local variables ...
  #define reportblock ^{ ... code that summarizes locals ... ; return summary; }

  YourAssert( cond, "cond gone bad. summary: %@", reportblock());
}

Note that the #define ensures that each YourAssert() captures the state at the time of the assertion. Note also that the above might have a potentially significant impact on performance.

Note also that I just made that code up. It seems like it is worthy of investigation, but may prove non-viable for a number of reasons.

like image 154
bbum Avatar answered May 08 '26 03:05

bbum



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!