Добавьте символическую точку останова в селекторе в Xcode

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

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

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

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

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

введите здесь описание изображения

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


person Roger    schedule 25.11.2011    source источник


Ответы (5)


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

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

person Martin R    schedule 02.07.2012

Я искал тот же ответ (символические точки останова), и эта ссылка помогла: 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:]

person Canopus    schedule 25.03.2013

Я бы установил символическую точку останова с помощью этого символа -[NSObject doesNotRecognizeSelector:] введите здесь описание изображения

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

person Bala    schedule 23.10.2014

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

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

person Duncan C    schedule 21.06.2012

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

person ancorio    schedule 24.01.2013
comment
Не ответ. Улучшите с более подробной информацией и рабочим примером. - person Max MacLeod; 18.09.2020