Как получить срабатывание точки останова, если переменная экземпляра в классе изменилась?

Скажем, у меня есть переменная, self.position, как я могу заставить Xcode прерываться всякий раз, когда он меняет свое значение (несколько методов могут его изменить).

Ответ 1

При условном нарушении:

  • Параметр Cmd + щелкните точку останова
  • Добавьте условие break, например:

enter image description here

Для разрыва в каждом случае значение изменилось:

  • Реализовать тривиальный сеттер (и getter для чистого кода).
  • Добавить точку останова для сеттера.

Если вы хотите узнать, кто вызвал установщик, просто посмотрите на следующую строку в трассировке стека (viewDidLoad в моем примере):

enter image description here

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, чтобы иметь точку останова, когда она устанавливает переменную.