How do I have a breakpoint get triggered if an instance variable in the class has its value changed?

Doug Smith picture Doug Smith · Aug 9, 2013 · Viewed 13.8k times · Source

Say I have a variable, self.position, how do I get Xcode to break whenever it changes its value (a number of methods could change it).

Answer

Stavash picture Stavash · Aug 9, 2013

For conditional breaking:

  1. Cmd+option click the breakpoint
  2. Add a break condition like so:

enter image description here

For breaking on every occasion the value has changed:

  1. Implement trivial setter (and getter for the sake of clean code).
  2. Add breakpoint to setter.

If you want to see who invoked the setter - just look at the next line in the stack trace (viewDidLoad in my example):

enter image description here

Update:

Adding a watchpoint

  1. Break anywhere so that the (lldb) prompt shows up in the console
  2. Type in watchpoint set variable _position (replace _position with an iVar you want to watch)
  3. Make a note of the assigned watchpoint number to your newly created watchpoint.
  4. Modify the watchpoint for conditional breaking: watchpoint modify -c "_position < 0.5" 1 where the expression in quotes is the condition and the number at the end is the watchpoint number you noted in #3.
  5. Continue running. You'll break whenever the value matches the condition and you'll be able to inspect the stack frame to understand where the call came from.