Добавьте символическую точку останова на селекторе в Xcode - PullRequest
9 голосов
/ 25 ноября 2011

В моем приложении есть ошибка, которая обнаруживается со следующей (частичной) трассировкой стека:

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

Для отладки я решил добавить символическую точку останова на - [Event boolValue], мотивируя это тем, что когда этот селекторотправлено, отладчик остановится.

Однако ничего не происходит.После установки точки останова приложение просто включает и генерирует то же исключение без остановки.

Я определил точку останова следующим образом:

enter image description here

Я используюотладчик LLDB с Xcode 4.2

Ответы [ 5 ]

10 голосов
/ 02 июля 2012

Установка точки останова для селектора приводит к остановке lldb при выполнении этого селектора, а не при его отправке.В вашем случае нет селектора «- [Event boolValue]», поэтому эта точка останова никогда не будет достигнута.

Я бы установил точку останова исключения на «Все исключения Objective C».Это произойдет, когда возникнет исключение «нераспознанный селектор отправлен», и вы увидите, где возникла проблема.

6 голосов
/ 25 марта 2013

Я искал тот же ответ (символические контрольные точки), и эта ссылка помогла: http://www.cocoabuilder.com/archive/cocoa/308967-symbolic-breakpoints.html#308970

Вы должны следовать этому шаблону (он также указывается в качестве заполнителя в редакторе точек останова Xcode):

- [name_of_the_class name_of_the_method:]

Например, я искал, кто устанавливает мой элемент левой панели и переопределяет мои настройки, я использовал -[UINavigationItem setLeftBarButtonItem:]

и это сработало. Или этот

-[UINavigationController pushViewController:animated:]

4 голосов
/ 23 октября 2014

Я бы установил символическую точку останова с этим символом -[NSObject doesNotRecognizeSelector:] enter image description here

, которая поможет нам фиксировать ситуации, когда селектор вызывается против неправильного объекта.

2 голосов
/ 21 июня 2012

Мне кажется, что символические контрольные точки не работают правильно в LLDB (я использую самую последнюю выпущенную версию Xcode на момент написания этой статьи, 4.3.3).

Я установил символическую точку останова в addAnimation: forKey: в LLDB, и он никогда не попадал. Если я переключу свой проект на GDB, точка останова будет работать как положено.

0 голосов
/ 24 января 2013

Лучший способ найти нераспознанный вызов селектора - создать этот селектор (как категорию) и установить в нем точку останова.

...