2013-08-09 5 views
12

Dire che ho una variabile, self.position, come faccio a ottenere Xcode per interrompere ogni volta che cambia il suo valore (un numero di metodi potrebbe cambiarlo).Come si attiva un punto di interruzione se una variabile di istanza nella classe ha il suo valore modificato?

+1

Se' self.position' è una proprietà, aggiungi un metodo '- (void) setPosition: (CGPoint) pos {_position = pos;} ', e imposta un breakpoint in quel setter. – dasblinkenlight

+0

@dasblinkenlight E 'possibile vedere quale linea ha richiamato il set? –

+2

Assolutamente - aprire lo stack di chiamate e fare doppio clic sul frame uno verso il basso rispetto a quello corrente. – dasblinkenlight

risposta

26

per la rottura condizionale:

  1. opzione Cmd + clic sul punto di interruzione
  2. aggiungere una condizione di rottura in questo modo:

enter image description here

Per rompere in ogni occasione della il valore è stato modificato:

  1. Implementare banale setter (e getter per il codice pulito).
  2. Aggiungi punto di interruzione al setter.

Se volete vedere chi ha invocato il setter - basta guardare la riga successiva nella traccia dello stack (viewDidLoad nel mio esempio):

enter image description here

Aggiornamento:

Aggiunta di un punto di controllo

  1. Rompere ovunque in modo che la richiesta (lldb) si presenta nella console
  2. Digitare watchpoint set variable _position (sostituzione _position con un'iVar che si desidera vedere)
  3. Annotare il numero watchpoint assegnato al watchpoint appena creato.
  4. Modificare il punto di controllo per interruzione condizionale: watchpoint modify -c "_position < 0.5" 1 dove l'espressione tra virgolette è la condizione e il numero alla fine è il numero di watchpoint annotato in # 3.
  5. Continuare a correre. Interromperai ogni volta che il valore corrisponde alla condizione e sarai in grado di ispezionare lo stack frame per capire da dove proviene la chiamata.
+1

Ci sono altre cose interessanti che puoi fare con i punti di interruzione in XCode. Ad esempio: http://stavash.wordpress.com/2012/12/22/pimp-your-xcode-add-sound-to-breakpoints/ – Stavash

+0

Wow, è bello saperlo! Il tuo esempio sembra mostrare una proprietà, però. Funziona su ivars e sulle proprietà? – dasblinkenlight

+0

Funzionerà su qualsiasi cosa venga valutata nell'espressione che si scrive nell'ambito specifico del punto di interruzione. – Stavash

5

Bene, il modo più semplice per farlo è fare clic con il pulsante destro del mouse sulla variabile nella finestra di controllo e selezionare l'opzione variabile di controllo. Xcode ti avviserà quando il valore sarà cambiato.

Oppure si potrebbe dare un'occhiata a Key-Value Observing.

+0

Anche io penso che KVO sia anche un'opzione per farlo. – Exploring

2

È possibile ignorare il setter di position per ottenere un punto di interruzione quando imposta la variabile.

+0

E 'possibile vedere quale linea ha invocato il setter? –

4

Impostare un punto di interruzione simbolico. Vai a Breakpoint Navigator, fai clic sul +, fai clic su "Aggiungi punto di rottura simbolico". Nel primo campo, digita - [YourSubclassNameHere setPosition:] ", aggiungi qualsiasi altra impostazione che desideri, quindi fai clic all'esterno della finestra di dialogo