Xcode Debugger - блогът на уеб разработчиците
Когато създавате и стартирате приложението си в Xcode, можете да използвате дебъгера, за да спрете неговото изпълнение и да се възползвате от неговите възможности.
Дебъгерът в Xcode 5 се нарича LLDB.
Има голяма разлика между стартиране на приложение и отстраняване на грешки в него в Xcode; основната разлика между двете е дали точките на прекъсване са активирани или игнорирани. Активността на точката на прекъсване има две нива.
Глобален
Точките на прекъсване в съвкупността могат да бъдат активни или неактивни. Ако точките на прекъсване са неактивни, тогава изпълнението на програмата няма да бъде спряно на нито една от точките на прекъсване.
Индивидуално
Отделна точка на прекъсване може да бъде активирана или деактивирана. Дори ако точките на прекъсване са колективно активни, изпълнението на програмата не спира на точка на прекъсване, ако тя е деактивирана. Деактивирането на точка на прекъсване ви позволява да оставите точка, където по-късно можете да поставите на пауза изпълнението на програмата.
Точка на прекъсване се игнорира, ако е деактивирана или ако всички точки на прекъсване в агрегата не са активни.
Важно е да запомните, че когато използвате програмата за отстраняване на грешки, приложението трябва да бъде изградено в конфигурацията за изграждане на отстраняване на грешки (която е по подразбиране за схемата за действие Run). Дебъгерът е почти безполезен, ако приложението е изградено в конфигурация за изграждане на Release, също и защото оптимизациите, извършени от компилатора, могат да прекъснат връзките между инструкциите за изпълним код и редовете от изходния код.
Фиг. 9.4. Точка на прекъсване Фиг. 9.5. Деактивирана точка на прекъсване
Освен това е възможно да се промени поведението на точката на прекъсване. Натиснете клавиша, щракнете върху символа на точката на прекъсване, разположен в полето или в навигатора на проекта, иизберете командата Редактиране на точка на прекъсване или натиснете комбинацията от команди ). Активното състояние на всички точки на прекъсване заедно не влияе върху това дали отделните точки на прекъсване са включени или изключени; ако точките на прекъсване са били неактивни, всички те просто се игнорират и няма прекъсвания
не възниква. Стрелките, представляващи точки на прекъсване, са сини, когато точките на прекъсване са активни, и сиви, когато не са.
Фиг. 9.6. Пауза в точка на прекъсване
Ето някои от нещата, които можете да правите, докато сте на пауза в точка на прекъсване.
Разберете къде се намирате
Една от най-често срещаните причини за задаване на точка на прекъсване е да се уверите, че нишката на изпълнение минава през определен ред. Можете да разберете в кой от вашите методи се намирате, като щракнете върху името на метода в стека на извикванията в навигатора за отстраняване на грешки.
Методите, изброени в стека на повикванията заедно с иконата на потребител с черен шрифт, са вашите методи; щракнете върху един от тях, за да видите къде е настъпила паузата в този метод. Други методи с текст в сиво са методи, за които не сте написали кода, така че щракването върху тях не е практично, ако не знаете асемблер. Плъзгачът в лентата за филтриране скрива част от веригата на повикванията, за да спести място, започвайки с методи, за които нямате код.
Можете също така да преглеждате и да навигирате в стека на повикванията, като използвате лентата за бърза навигация в горната част на панела за отстраняване на грешки.
Изследване на променливи стойности
Това е много честа причина за спиране. Панелът за отстраняване на грешки изброява стойностите на променливите в текущия обхват (според разпределението в стека на повикванията). Като щракнете върхуВ отварящия се триъгълник ще видите допълнителни свойства на обекта, като елементи на колекция, променливи на екземпляри и дори частна информация. Тук можете да видите стойностите на локалните променливи, дори ако те не са били инициализирани преди паузата на изпълнението; тези стойности са безсмислени и трябва да се игнорират.
Превключете изскачащото меню под списъка с променливи на Автоматично, за да видите само променливи, които Xcode смята, че трябва да ви интересуват (например, защото техните стойности са се променили наскоро). Ако се интересувате от пълна информация, най-добре е да зададете настройката на Local. Можете да използвате полето за търсене, за да филтрирате имена и стойности. Ако форматираното резюме не е достатъчно информативно, можете да изпратите описание на обектната променлива (или, ако
В допълнение, в средата на Xcode 5 съветите за данни са направени по-информативни. За да видите подсказката, задръжте курсора на мишката над името на променливата във вашия код. Подсказката е като малък екран за показване на дадена стойност в списък с променливи: има извит триъгълник, върху който можете да щракнете, за да получите повече информация, бутон Информация, върху който можете да щракнете, за да видите описание на стойността в този прозорец и на конзолата, и бутон Бърз преглед за графично представяне на стойността (Фигура 9.7).
Фигура 9.7 Съвет
Освен това е възможно да промените стойностите на променливите по време на паузата за отстраняване на грешки. Изберете ред в списъка с променливи и натиснете клавиша, за да го направите редактируем, или щракнете двукратно върху подсказката; това е начинът, по който могат да се променят прости скаларни стойности (например числа с плаваща величина и числа и указатели). Можете също да използвате командата exprg на конзолата,за да зададете стойност. Тази функция трябва да се използва умерено (или да не се използва изобщо).
Задайте гледна точка
Точката на наблюдение е подобна на точка на прекъсване, но вместо да бъде обвързана с конкретен ред код, тя зависи от стойността на променлива: веднага щом стойността на тази променлива се промени, дебъгерът спира приложението. Точката за наблюдение може да бъде зададена само докато програмата за отстраняване на грешки е поставена на пауза. Натиснете клавиша, щракнете върху променливата в списъка с променливи и изберете командата Watch [Variable]. Създадените точки за наблюдение се изброяват и управляват в прозореца на навигатора на точките на прекъсване. Тъй като за работа с точки за наблюдение са необходими допълнителни ресурси, техният брой не трябва да е голям.
Управление на изрази
Изразът е код, който може да се добави към списък с променливи и да се оценява всеки път, когато възникне пауза. Изберете командата Добавяне на израз от контекстното меню в списъка с променливи. Изразът се оценява в текущия контекст на вашия код, така че пазете се от странични ефекти.
Комуникация с програмата за отстраняване на грешки
С помощта на конзолата можете да комуникирате директно с дебъгера. Интерфейсът на дебъгера Xcode е средство за комуникация с програмата LLDB; за да комуникирате директно с дебъгера LLDB, можете да правите всичко, което обикновено бихте направили с интерфейса на дебъгера в Xcode и много повече.
Често срещана команда е ro (съкращение от „печат обект“), последвано от името на променлива на обект или извикване на метод, който връща обект. Тази команда извиква метода за описание на обекта (или, ако сте го внедрили, debugDescription). Друга важна команда е exp, която оценява Objective-C израз в текущия контекст, т.е. Освен товаосвен това, можете да извикате метод или да промените стойността на променлива в обхват! Всяка команда на конзолата за отстраняване на грешки в LLDB може също да бъде изпълнена като действие на команда за отстраняване на грешки, свързано с точка на прекъсване.
Манипулиране на точки на прекъсване
Можете свободно да създавате, унищожавате, редактирате, активирате/деактивирате и извършвате други динамични действия върху точки на прекъсване, дори докато програмата работи. Това е особено полезно, защото къде следва да спре програмата може да зависи от това къде е спряла в момента.
Всъщност това е едно от основните предимства на точките на прекъсване пред грубото отстраняване на грешки. За да промените грубото отстраняване на грешки, трябва да спрете да изпълнявате приложението, да го редактирате, да го изградите отново и да го стартирате отново. Не е нужно обаче да спирате програмата, за да манипулирате точките на прекъсване! Операция, която е неуспешна, но не води до срив на програмата, може да бъде изпробвана повторно в реално време; можете просто да добавите точка на прекъсване и да опитате отново. Например, ако даден бутон не работи правилно при щракване, можете да добавите точка на прекъсване и да щракнете отново върху него; този път ще бъде изпълнен същия код и можете да разберете какъв е проблемът.
Преминете или продължете
За да продължите изпълнението на спряно приложение, можете или да възобновите изпълнението, докато се срещне следващата точка на прекъсване (Debug^Continue), или да направите една стъпка и да спрете отново. Като алтернатива можете да изберете ред и да изберете командата Debug ^Continue to Current Line (или Continue to Here от контекстното меню), която задава точка на прекъсване на посочения ред, продължава изпълнението ипремахва тази точка на прекъсване.
Нека изброим командите за поетапно отстраняване на грешки в менюто за отстраняване на грешки.
Прекрачете
Пауза на следващия ред.
Стъпка в
Пауза в метода, който се извиква на текущия ред, ако има такъв; в противен случай направете пауза на следващия ред.
Излезте
Пауза след връщане от текущия метод.
Можете да изберете тези команди с помощта на удобните бутони на лентата в горната част на прозореца за отстраняване на грешки. Дори ако прозорецът за отстраняване на грешки е минимизиран, панелът, съдържащ тези бутони, се появява, докато програмата работи.
Ако командата Step Over не достигне до следващия ред поради точка на прекъсване в метод, извикан на текущия ред, командата Continue автоматично ще спре изпълнението на програмата — не е необходимо да изпълнявате командата Step Out поради неочаквана точка на прекъсване.
Започнете отначало или прекъснете
За да спрете изпълнението на приложението, щракнете върху бутона Stop в лентата с инструменти (Product^Stop, ). Щракването върху бутона Забележка в прозореца на симулатора (Hardware^Note) или на устройството не спира приложението да работи в многозадачен iOS 4 и по-нови версии. За да спрете работещо приложение и да го стартирате отново без повторно изграждане, натиснете клавиша и щракнете върху бутона Изпълнение в лентата с инструменти (Продукт^Извършване на действие^Изпълнение без изграждане, ).
Можете да правите промени в кода си, докато приложението работи или спира, но тези промени няма да бъдат магически известни на работещото приложение. Има езици и среди за програмиране, където това е възможно, но Xcode и Objective-C не са сред тях. За да видите резултата от направените промени, трябва да спрете приложението и да го стартирате в нормален режим (койтопредполага сглобяване).