Скажем, у меня есть переменная, self.position
, как я могу заставить Xcode прерываться всякий раз, когда он меняет свое значение (несколько методов могут его изменить).
Как получить срабатывание точки останова, если переменная экземпляра в классе изменилась?
Ответ 1
При условном нарушении:
- Параметр Cmd + щелкните точку останова
- Добавьте условие break, например:
Для разрыва в каждом случае значение изменилось:
- Реализовать тривиальный сеттер (и getter для чистого кода).
- Добавить точку останова для сеттера.
Если вы хотите узнать, кто вызвал установщик, просто посмотрите на следующую строку в трассировке стека (viewDidLoad в моем примере):
Update:
Добавление точки наблюдения
- Перерыв в любом месте, чтобы в консоли появилось приглашение
(lldb)
- Введите
watchpoint set variable _position
(замените _position на iVar, который вы хотите посмотреть) - Обратите внимание на назначенный номер точки наблюдения на вновь созданную точку наблюдения.
- Измените точку наблюдения для условного взлома:
watchpoint modify -c "_position < 0.5" 1
, где выражение в кавычках - это условие, а число в конце - номер точки наблюдения, который вы отметили в # 3. - Продолжить работу. Вы будете ломаться всякий раз, когда значение соответствует условию, и вы сможете проверить фрейм стека, чтобы понять, откуда пришел вызов.
Ответ 2
Ну, простой способ сделать это - щелкнуть правой кнопкой мыши на переменной в окне просмотра и выбрать опцию watch variable. Затем Xcode предупредит вас, когда значение будет изменено.
Или вы могли бы взглянуть на Наблюдение за ключевыми значениями.
Ответ 3
Установите символическую точку останова. Перейдите на Навигатор точек останова, нажмите +, нажмите "Добавить символическую точку останова". В первом поле введите - [YourSubclassNameHere setPosition:] ", добавьте любой другой параметр, который вы хотите, затем щелкните вне диалогового окна.
Ответ 4
Вы можете переопределить установщик position
, чтобы иметь точку останова, когда она устанавливает переменную.