Xcode И Расширенная Отладка В Lldb: Часть 2

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

Я намеренно создал демонстрационный проект с несколькими ошибками, чтобы понять, как использовать различные типы точек останова в LLDB для отладки приложения.

Если вы не изучили первую часть статьи, лучше начать с нее.

Напомню важное правило этого туториала: До конца этой статьи вы не останавливаете компилятор и не перезапускаете приложение после самого первого запуска.

Вы исправляете ошибки во время работы программы.

Точки наблюдения Итак, в приложении возникает следующая ошибка: 3. Вы можете загружать посты более 7 раз.

Как воспроизвести ошибку:

  • Включите Интернет на вашем iPhone/симуляторе
  • Прокрутите вниз до нижней части таблицы, чтобы загрузить больше сообщений.

  • Вы сможете загружать посты более 7 раз (Хотя в этом приложении у пользователя не должно быть такой возможности).

Один из способов выявить ошибку — выяснить, как обновляется целочисленная переменная.

номер страницы после загрузки новых сообщений на страницу.

Поскольку вы еще не очень хорошо знакомы с моим кодом, вам придется потратить некоторое время, чтобы понять, что в нем происходит. Не нужно беспокоиться.

Давайте воспользуемся немного магией.

Из первой части статьи мы узнали, что HTTP-запрос GET выполняется в разделе Прагма Марк Сеть .

Он содержит ровно одну функцию loadPosts .

Поместите точку останова в первой строке этой функции и потяните таблицу вниз для обновления.

Компилятор остановится на этой точке останова.



Xcode и расширенная отладка в LLDB: часть 2

Цель-C

Xcode и расширенная отладка в LLDB: часть 2

Быстрый В нижнем окне отладчика нажмите кнопку «Показать переменные».

Слева появится новое окно, в котором вы увидите все переменные PostsTableViewController.

Xcode и расширенная отладка в LLDB: часть 2

Наведите курсор на переменную pageNumber, щелкните правой кнопкой мыши и выберите «Watch _pageNumber» / «Watch pageNumber» для Objective-C и Swift соответственно.



Xcode и расширенная отладка в LLDB: часть 2

Цель-C

Xcode и расширенная отладка в LLDB: часть 2

Быстрый Таким образом вы создали так называемую точку наблюдения за переменной.

номер страницы .

Точка наблюдения — это тип точки останова, которая останавливает отладчик каждый раз, когда изменяется значение установленной для него переменной.



Xcode и расширенная отладка в LLDB: часть 2

Цель-C

Xcode и расширенная отладка в LLDB: часть 2

Быстрый Продолжайте работу с программой.

Отладчик остановится, и вы увидите что-то вроде этого: Цель-C

Xcode и расширенная отладка в LLDB: часть 2

  1. Запись старых и новых значений переменных номер страницы .

  2. Отслеживание стека кода, который меняет значение переменной номер страницы .

  3. Текущая точка, вызвавшая изменение переменной.

    номер страницы – метод установки этой переменной.

Если вы обратитесь к точке 1 трассировки стека, вы перейдете к следующему фрагменту кода:

Xcode и расширенная отладка в LLDB: часть 2

Быстрый

Xcode и расширенная отладка в LLDB: часть 2

  1. Отладчик сообщает вам, что установленная вами точка наблюдения что-то обнаружила.

  2. Отслеживание стека кода, который меняет значение переменной номер страницы .

  3. Текущая точка, вызвавшая изменение переменной.

    номер страницы – функция ОбновлениеForNetworkCallEnd .

Логично сделать вывод, что каждый раз после успешного HTTP GET-запроса переменная номер страницы увеличивается на 1 до тех пор, пока переменная состояние (тип перечисления) в «активном» состоянии.

Эта переменная может иметь 2 состояния: либо активное («активное»), либо неактивное («неактивное»).

Состояние «активно» предполагает, что пользователь может загружать посты (то есть лимит в 7 загрузок не достигнут).

Состояние «неактивно», наоборот, предполагает, что пользователь больше не сможет загружать посты.

В результате нам нужно добавить логику в функцию ОбновлениеForNetworkCallEnd , который проверит переменную номер страницы и установит переменную состояние соответствующее состояние.

Как вы уже догадались, гораздо проще сначала проверить гипотезу, не останавливая компилятор перед внесением изменений в код. Отмечу, что в разделе Прагма Марк Поддержка у нас уже есть нужная нам функция ( setToInactiveState ), который устанавливает переменную состояние состояние «неактивно».

Добавьте точку останова на одну строку выше условия если .

Также добавьте в отладчик следующую команду инструкции.

Цель-C

  
   

expression if (self.pageNumber >= 7) {[self setToInactiveState]}



Xcode и расширенная отладка в LLDB: часть 2

Быстрый

expression if (self.pageNumber >= 7) {setToInactiveState()}



Xcode и расширенная отладка в LLDB: часть 2

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

Также деактивируйте саму точку наблюдения.



Xcode и расширенная отладка в LLDB: часть 2

Цель-C

Xcode и расширенная отладка в LLDB: часть 2

Цель-C

Xcode и расширенная отладка в LLDB: часть 2

Быстрый

Xcode и расширенная отладка в LLDB: часть 2

Быстрый Теперь прокрутите таблицу до верха, потяните вниз, чтобы обновить ее, и начните прокрутку.

Все получилось! Но праздновать пока рано, нам осталось исправить одну ошибку! Что дальше? Заключительная, третья часть статьи, в которой мы узнаем о другом типе точек останова — символических точках останова.

Теги: #разработка iOS #разработка мобильных приложений #мобильные приложения #отладка

Вместе с данным постом часто просматривают: