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?
risposta
per la rottura condizionale:
- opzione Cmd + clic sul punto di interruzione
- aggiungere una condizione di rottura in questo modo:
Per rompere in ogni occasione della il valore è stato modificato:
- Implementare banale setter (e getter per il codice pulito).
- 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):
Aggiornamento:
Aggiunta di un punto di controllo
- Rompere ovunque in modo che la richiesta
(lldb)
si presenta nella console - Digitare
watchpoint set variable _position
(sostituzione _position con un'iVar che si desidera vedere) - Annotare il numero watchpoint assegnato al watchpoint appena creato.
- 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. - 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.
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
Wow, è bello saperlo! Il tuo esempio sembra mostrare una proprietà, però. Funziona su ivars e sulle proprietà? – dasblinkenlight
Funzionerà su qualsiasi cosa venga valutata nell'espressione che si scrive nell'ambito specifico del punto di interruzione. – Stavash
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.
Anche io penso che KVO sia anche un'opzione per farlo. – Exploring
È possibile ignorare il setter di position
per ottenere un punto di interruzione quando imposta la variabile.
E 'possibile vedere quale linea ha invocato il setter? –
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
Se' self.position' è una proprietà, aggiungi un metodo '- (void) setPosition: (CGPoint) pos {_position = pos;} ', e imposta un breakpoint in quel setter. – dasblinkenlight
@dasblinkenlight E 'possibile vedere quale linea ha richiamato il set? –
Assolutamente - aprire lo stack di chiamate e fare doppio clic sul frame uno verso il basso rispetto a quello corrente. – dasblinkenlight