Doug Smith
Doug Smith

Reputation: 29326

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

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).

Upvotes: 23

Views: 17074

Answers (4)

user749127
user749127

Reputation:

Set a symbolic breakpoint. Go to the Breakpoint Navigator, click the +, click "Add Symbolic Breakpoint." In the first field, type -[YourSubclassNameHere setPosition:]", add any other setting you'd like to, then click outside the dialog.

Upvotes: 8

Stavash
Stavash

Reputation: 14304

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.

Upvotes: 29

user2666713
user2666713

Reputation: 200

You could override the setter of position to have a breakpoint when it sets the variable.

Upvotes: 2

geekchic
geekchic

Reputation: 2431

Well the simple way to do it is right clicking on the variable in the watch window and selecting the watch variable option. Xcode will then alert you when the value is changed.

Or you could have a look at Key-Value Observing.

Upvotes: 7

Related Questions