2011-11-25 12 views
6

Jest to błąd w moim app, który pojawia się z poniższym (częściowego) stacktrace:Dodaj symboliczną przerwania na selektor w Xcode

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

W tym celu debugowania postanowiłem dodać symboliczną przerwania na - [Event boolValue] rozumując, że kiedy ten selektor zostanie wysłany, debugger zatrzyma się.

Jednak nic się nie dzieje. Po ustawieniu punktu przerwania aplikacja uruchamia się i generuje ten sam wyjątek bez zatrzymywania się.

Mam zdefiniowany punkt przerwania w następujący sposób:

enter image description here

Używam debugera LLDB z Xcode 4.2

Odpowiedz

7

Ustawienie punktu przerwania na selektorze powoduje zatrzymanie lldb podczas wykonywania selektora, a nie podczas wysyłania. W twoim przypadku nie ma selektora "- [Event boolValue]", dlatego ten punkt przerwania nigdy nie zostanie trafiony.

Ustawiłbym wyjątek breakpoint na "Wszystkie wyjątki od obiektu C". Zostanie to wykonane, gdy zgłoszony zostanie wyjątek "nierozpoznany selektor wysłany" i będzie można zobaczyć, gdzie występuje problem.

2

To mi wygląda punkty przerwania symboliczne nie działają bezpośrednio w LLDB (Używam najnowszej wydanej wersji Xcode od tego pisania, 4.3.3).

Ustawiam symboliczny punkt przerwania w addAnimation: forKey: w LLDB i nigdy nie zostanie trafiony. Jeśli przerzucę mój projekt na GDB, punkt przerwania działa zgodnie z oczekiwaniami.

-2

Najlepszym sposobem na znalezienie nierozpoznanego połączenia selektora jest utworzenie tego selektora (jako kategorii) i umieszczenie w nim punktu przerwania.

3

Szukałem samą odpowiedź (punkty przerwania symboliczne) i ten link pomógł: http://www.cocoabuilder.com/archive/cocoa/308967-symbolic-breakpoints.html#308970

Trzeba podążać ten wzór (jest również podawana jako zastępczy w edytorze punktu przerwania Xcode):

- [name_of_the_class name_of_the_method:] 

na przykład szukałem aby zobaczyć, kto ma ustawiony lewą pozycję bar i nadpisuje moje ustawienia, użyłem -[UINavigationItem setLeftBarButtonItem:]

i to działało. Albo ten

-[UINavigationController pushViewController:animated:]

2

chciałbym ustawić Symboliczne przerwania tym symbolem -[NSObject doesNotRecognizeSelector:]enter image description here

który pomoże nam uchwycić sytuacje, gdy przełącznik jest powoływane przeciwko złym obiektu.

Powiązane problemy