Точка останова Xcode не запускается, даже если вызывается метод

#swift #xcode #breakpoints

#быстрый #xcode #точки останова

Вопрос:

Мои контрольные точки, похоже, увеличиваются. Я обнаружил, что некоторые точки останова срабатывали, а другие — нет. Вот один пример:

Я попытался создать новый проект приложения iOS (интерфейс: раскадровка, жизненный цикл: делегат приложения UIKit). Единственное изменение кода, которое я внес, это:

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        print("traitCollectionDidChange -- called --")
}
 

Затем у меня есть точка останова в строке печати. Проект создается и запускается, и если я изменяю переопределения среды для изменения размера текста / динамического типа, приведенная выше инструкция печати регистрируется, но точка останова не срабатывает.

Я проверил несколько различных настроек, как предложено здесь, и из других источников, но я не могу понять, как это исправить. Я проверил схемы, настройки, удалил файл DerivedData, даже переустановил xCode… Также попробовал переустановить инструменты разработчика командной строки.

Я потратил несколько часов, пытаясь разобраться в этом. Любая помощь была бы очень признательна.

Обновить:

Тем временем я зарегистрировал дефект в Apple. Кажется, что при использовании инспектора доступности для изменения размера шрифта traitCollectionDidChange вызывается then (как и при переопределении среды), но разница в том, что при использовании инспектора доступности срабатывает точка останова. Если вы вернетесь к переопределениям среды, то он «прерывает» инспектор доступности, а затем traitCollectionDidChange больше не вызывается, и соответствующая точка останова также не срабатывает. Перестройка сбрасывает эту проблему.

Комментарии:

1. Достигаются ли другие точки останова? Если нет — работаете ли вы в режиме отладки или выпуска?

2. ДА. Другие точки останова будут поражены. Я только что заметил, что некоторые из них таковыми не являются. Выполняется в режиме отладки. Другие точки останова работают, но некоторые из них не такие, как указано выше. Я не смог разглядеть никакой разницы между теми, которые есть, и теми, которых нет.

3. Возможно, это поможет экспортировать точки останова в JSON и проверить, нет ли внутри чего-то странного. Для экспорта используйте breakpoint write -f ~/breakpoints.json в консоли отладки.

4. Затем попробуйте перебор. Я опубликую ответ, потому что поле для комментариев слишком маленькое.

Ответ №1:

Попробуйте атаковать грубой силой:

  1. Создание глобальной функции
 func forceBreakpoint() {
    print ("breakepoint hit")
}

 
  1. вызовите эту функцию
 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    print("traitCollectionDidChange -- called --")
    forceBreakpoint()
}
 
  1. создайте символическую точку останова для forceBreakpoint

Запустите приложение и надейтесь, что точка останова наступит прямо сейчас.

Комментарии:

1. Спасибо. Я действительно пробовал это. Точка останова не срабатывает, хотя оператор печати вызывается. Тем не менее, вращение устройства симулятора запускает точку останова (и оператор печати).

2. и каков результат br list для этой точки останова? Вы должны получить что-то вроде language = swift, locations = 1, resolved = 1, hit count = , а затем a 0 , если оно не было поражено, или a 1 , если оно было поражено.

3. Так что это интересно… Количество попаданий показывает правильное количество, br list даже если Xcode никогда не «останавливался» в этой точке останова….