ПредишенСледващото

Работа с дебъгер

Нека да преминем от теорията към практиката. Изтеглете Лазар с нов проект, създаден под формата на обикновен бутон и да спаси проекта в папка 27-01. Имената на проекта, форми, модули и не е необходимо да се промени един бутон, оставят имената на данните по подразбиране.

На следващо място, се генерира събитието OnClick на бутона, който пише следния код:

Какво правим тук? Използване число променлива и като за брояча на цикъл. Цикъл продукти от -3 до 3, т.е., 7 пъти, включително нула. Тялото на цикъла, разделим 10 до стойността на т. резултат е направена като низ-ви и се добавят към списъка с низове. По-горе споменахме, че тези действия трябва да бъдат приложени в Изключение боравене блок пробвам-накрая край. които сме направили.

Ако сте внимателно изучава курса, с просто око се вижда, че през четвъртото итерация на цикъла се случва по време на работа грешка - разделение 10 на нула. Такава очевиден пример е най-подходящ за разглеждане на интегриран дебъгер, както знаете, когато има грешка, и ще бъде в състояние да анализира работата на дебъгер. Затова ние не се преструваме, подозирам грешка.

Така че ние написал програма да продължи, че е време да се съберат. Щракнете върху "Старт" в контролния панел (или ). Програмата обикновено компилирате и стартирате. Аз кликнете Button1. И тогава ще получим грешка:

Знайте, Intuit, лекция, тестване и отстраняване на грешки


Фиг. 27.3. съобщение за грешка Лазар

Според доклада, но е станала грешка по време на изпълнението на ред с код 42-ра. Е, натиснете "OK" и "Run -> Reset Debugger", за да спре програмата. Да се ​​върнем към кода и анализира 42-ти ред (ако сте добавили празен низ, тогава ще има различен брой):

Е, нищо престъпно не е тук, защо е възникнала грешката? Кодът е валиден и обикновено трябва да се извършва ... Когато отидете в подобна безизходица. може да ви помогне здрав разум и интегриран дебъгер. Здравият разум казва, че е имало грешка някъде в тялото на за цикъл. И да се използват за корекция на грешки, е необходимо да се спира изпълнението на програмата в този цикъл, а след това да продължи неговия ред. За да спрете програмата са т.нар точка на пречупване (инж. Гранични).

Точки ostanova- тази линия, преди да изпълни, че за отстраняване на грешки отменя изпълнението на програмата, както и в очакване на по-нататъшни действията си.

Можете да зададете една точка или повече, в различни части на кода. Тъй като грешката в 42-ти ред, той ще бъде разумно да се спре изпълнението на предишния 41-ти ред. Преместване на курсора до тази линия, която и да е от мястото си.

Задайте точка на прекъсване може да бъде най-различни начини:

Последните два метода са най-удобният, но сте избрали. Във всеки случай, низ с набор точка на прекъсване ще се превърне в червено:


Фиг. 27.4. String точка на прекъсване

Премахване точка на пречупване също е удобен за последните две методи. Breakpoint имаме, отново натиснете бутона "Start". Програмата започва своето, щракнете върху бутона работа "Button1".


Фиг. 27.5. Низът да се изпълни по-

Ние не разполагаме с извиквания на функции, за да можем да се възползваме от двете . и (Най-често се използва - Етап повече).

Сега, натиснете . и корекция на грешки ще изпълни точка на прекъсване линия и разпределят сив следващия ред. кликнете отново . и отново той ще бъде откроен тази линия - е завършена стъпка цикъл. С натискането на няколко пъти . ние ще се появи на екрана на всички едни и същи грешки, която ще блокират по-нататъшното изпълнение на програмата. Става ясно, че цикълът обикновено се извършва на няколко пропуски, а след това все още е грешка. Включете логика: във вътрешността на линия ние само се променя променливата аз. Ето защо, грешката е свързана по някакъв начин с него. И откъде знаеш как?

Тук идват на помощ на друг полезен инструмент дебъгер - следи стойностите на променливите. Възстановяване на програмата с "Run -> Reset дебъгер." Сега натиснете бутона отново "на Button1" бутона "Старт" и след това отново. Debugger отново преустанови изпълнението на програмата по линията с цикъла, но не бързайте да натиснете . За да започнете, добавете наблюдение на променливата аз. Това се прави с "Run -> Добавяне на наблюдение", което не е на разположение, докато програмата не е започнал да тече. В "изразът" влиза променливата аз. и натиснете "ОК":

Знайте, Intuit, лекция, тестване и отстраняване на грешки


Фиг. 27.6. Инсталиране наблюдава променлива

Сега дебъгер следи стойностите на променливата аз. но ние сме нито толкова по-добре - ние не виждаме тези ценности! За да ги видите, трябва да се покаже списъка на прозореца часовник. Това се прави с командата "View -> Windows Debug -> Наблюдение на прозорци" или "горещи клавиши" .

че ние трябва да се изчислява в рамките на цикъла. В списъка с часовник, и ще видите променливата аз. и експресия. и техните значения:


Фиг. 27.7. Наблюдение Списък Window

Тъй като променливата аз все още не е назначен на стойност -3, стойностите на колона, вие вероятно ще видите един, който е бил инициализира нашата променлива по подразбиране. Съответната стойност ще бъде в израза. Сега ние сме готови да продължат напред. преса . Списъкът за наблюдение веднага се промени картината - сега аз се равнява на -3, а изразът -3.3333 ...

преса отново. Отново, стойностите са се променили, и сега аз = -2. и експресията = -5. Ние разбираме, че цикъл работи, и бяха направени две стъпки. преса още два пъти. Сега променливата съдържа нула, и експресията показва "INF". Въпреки това, линията с изчисляването все още не е направено, не забравяйте за това. отново, натиснете . и отново върна грешка. И в стойностите на променливи и изрази виждаме думата "Оценяване", което се превежда като "оценка". Сега ние ясно виждаме, че линията

грешка се появява, когато променливата и е равна на нула. И тук не е трудно да се отгатне защо тази грешка възниква - защото там е опит за разделение 10-0.

Знайте, Intuit, лекция, тестване и отстраняване на грешки


Фиг. 27.8. Програмата Полученото съобщение

Както можете да видите, изчислението. когато аз е равна на нула, то се пропуска.

Вграден дебъгер има и други инструменти, с които ще можете да свикнете с течение на времето като експериментирате с тях.

Благодарим Ви за прекрасен, разбира се!

Независимият работата №2 съставяне MyCript.pas модул (OS: Windows 7 x64, Лазар 1.4 Win64), издадени за грешка в монтажа код

mycript.pas (54,5) Грешка: Asm: [тласък reg32] невалидна комбинация от опкод и операнди
mycript.pas (95,5) Грешка: Asm: [поп reg32] невалидна комбинация от опкод и операнди

Аз разбирам, че курса е готов за 32-битова операционна система, но какво да кажем в случая с 64-битови системи?

На манипулаторите FileCreate елементи на менюто, FileOpen, както и затваряне на формуляра манипулатор OnClose - в тези три процедури съдържат един и същ код

тях, преди да създадете нов текст>
ако след това Memo1.Modified започне
// ако потребителят е съгласен да запазите промените:
ако MessageDlg ( "Запиши като"
"Сегашната файлът е редактиран. Запазване на промените?
mtConfirmation [mbYes, mbNo, mbIgnore], 0) = mrYes тогава
FileSaveClick (подателя);
приключи; // ако

Позволете ми да ви попитам: няма ли да е по-добре да се направи този код в отделна процедура, например - под формата на манипулатор на събитие OnCloseQuery? Доколкото мога да си спомня за Delphi опит, обадете се на тази процедура сама по себе си не би трябвало да доведе до затварянето на формата. Това означава, че тя може да се използват при процедури за почистване Memo1 и четене от файл. Или в Лазар не можеш да направиш?

Свързани статии

Подкрепете проекта - споделете линка, благодаря!