2011-11-25 5 views
6

C'è un bug nella mia app, che si presenta con il seguente (parziale) stacktrace:Aggiungere un punto di interruzione simbolica su un selettore in Xcode

2011-11-25 01:55:59.760 Events2[6650:403] -[Event boolValue]: unrecognized selector sent to instance 0x7fb903928670 

eseguire il debug di questo ho deciso di aggiungere un punto di interruzione simbolica su - [Evento boolValue] Ragionamento che quando quel selettore viene inviato, il debugger si fermerebbe.

Tuttavia, non succede nulla. Dopo aver impostato il punto di interruzione, l'app si attacca e genera la stessa eccezione senza fermarsi.

ho definito il punto di rottura come segue:

enter image description here

che sto utilizzando il debugger LLDB con Xcode 4.2

risposta

7

L'impostazione di un punto di interruzione su un selettore causa l'arresto di lldb quando viene eseguito quel selettore, non quando viene inviato. Nel tuo caso, non c'è nessun selettore "- [Event boolValue]", quindi questo breakpoint non verrà mai colpito.

Vorrei impostare un punto di interruzione eccezione su "Tutte le eccezioni di Objective-C". Questo sarà colpito quando viene lanciata l'eccezione "selettore non riconosciuto inviato" e puoi vedere dove si verifica il problema.

2

Sembra a me come punti di interruzione simbolici non funzionano proprio in LLDB (Sto eseguendo la versione rilasciata più recente di Xcode al momento della stesura di questo, 4.3.3).

Ho impostato un punto di interruzione simbolico su addAnimation: forKey: in LLDB e non viene mai colpito. Se cambio il mio progetto in GDB, il punto di interruzione funziona come previsto.

-2

Il modo migliore per trovare la chiamata selettrice non riconosciuta è creare questo selettore (come categoria) e inserire un punto di interruzione.

3

che stavo cercando la stessa risposta (punti di interruzione simbolici) e questo legame ha aiutato: http://www.cocoabuilder.com/archive/cocoa/308967-symbolic-breakpoints.html#308970

Dovete seguire questo schema (è data anche come segnaposto in Xcode editore breakpoint):

- [name_of_the_class name_of_the_method:] 

per esempio stavo cercando di vedere che non impostare la mia voce della barra sinistra e sostituisce le mie impostazioni, ho usato -[UINavigationItem setLeftBarButtonItem:]

e ha funzionato. O questo uno

-[UINavigationController pushViewController:animated:]

2

vorrei impostare un punto di interruzione simbolica con questo simbolo -[NSObject doesNotRecognizeSelector:]enter image description here

che ci aiuterà a catturare le situazioni in cui un selettore viene invocata contro l'oggetto sbagliato.