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

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

4 ответов


для условного разрыва:

  1. Cmd+опция нажмите точку останова
  2. добавить условие вот так:

enter image description here

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

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

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

enter image description here

обновление:

добавление контрольной точки

  1. перерыв в любом месте, так что (lldb) приглашение появляется в консоли
  2. тип watchpoint set variable _position (замените _position на iVar, который вы хотите посмотреть)
  3. запишите присвоенный номер контрольной точки для вновь созданной контрольной точки.
  4. изменить точку наблюдения для условного разрыва: watchpoint modify -c "_position < 0.5" 1 где выражение в кавычках является условием, а число в конце-номером точки наблюдения, который вы отметили в #3.
  5. продолжить работу. Вы будете нарушать всякий раз, когда значение соответствует условию, и вы сможете проверить кадр стека, чтобы понять, откуда поступил вызов.

установить символическую точку останова. Перейдите в навигатор точек останова, нажмите+, нажмите "Добавить символическую точку останова"."В первом поле Введите - [YourSubclassNameHere setPosition:]", добавьте любую другую настройку, которую вы хотите, затем нажмите вне диалогового окна.


ну простой способ сделать это-щелкнуть правой кнопкой мыши по переменной в окне часов и выбрать опцию watch variable. Xcode предупредит вас, когда значение будет изменено.

или вы могли бы взглянуть на


вы можете переопределить сеттер position чтобы иметь точку останова при установке переменной.