Cunoștințe, prelegere, testare și depanare

Lucrul cu depanatorul

Să trecem de la teorie la practică. Descărcați Lazarus cu noul proiect, instalați un buton simplu pe formular și salvați proiectul în dosarul 27-01. Numele proiectelor, formularele, modulele și butoanele nu trebuie modificate, lăsa numele, datele implicite.







Apoi, generați un eveniment OnClick pentru butonul în care scrieți următorul cod:

Ce facem aici? Variabila int este folosită ca numărător pentru buclă for. Ciclul se face de la -3 la 3, adică de 7 ori, inclusiv zero. În corpul bucla, împărțim 10 cu valoarea lui i. rezultatul este realizat sub forma unei linii și adăugat la lista de șiruri de caractere st. Sa spus mai sus că astfel de acțiuni ar trebui să fie închise în blocul de tratare a excepțiilor de încercare în cele din urmă. pe care am făcut-o.

Dacă ai studiat cu atenție cursul, poți vedea cu ochiul liber că, în cea de-a patra trecere a ciclului, va exista o eroare de execuție - diviziunea 10 cu zero. Un astfel de exemplu evident este cel mai potrivit pentru a cunoaște programul de depanare încorporat, deoarece știți deja unde va fi eroarea și puteți analiza activitatea depanatorului. Să presupunem că nu suspectăm o greșeală.

Deci, am scris programul, l-am salvat, este timpul să-l compilam. Faceți clic pe butonul "Executare" din panoul de control (sau ). Programul este în mod normal compilat și pornit. Apăsați butonul Buton1. Apoi, obținem eroarea:

Cunoștințe, prelegere, testare și depanare


Fig. 27.3. Mesajul de eroare Lazarus

Judecând după mesaj, eroarea a apărut în timpul executării codului liniei 42. OK, apăsați "OK" și comanda "Run -> Reset Debugger" va opri programul. Să revenim la cod și să analizăm linia 42 (dacă ați adăugat linii goale, atunci veți avea un alt număr):

Ei bine, nu este nimic criminal despre asta, de ce sa întâmplat? Codul este corect și ar fi trebuit să fie executat corespunzător ... Când intri într-un astfel de punct mort. vă poate ajuta să aveți bun-simț și built-in debugger. Bunul simț spune că eroarea a avut loc undeva în corpul bucla pentru. Și pentru a utiliza depanatorul, trebuie să suspendați executarea programului pe acest ciclu, apoi să îl continuați liniar. Pentru a opri programul, există așa-numitele puncte de întrerupere.

Punctele de blocare sunt liniile înaintea cărora debuggerul întrerupe executarea programului și așteaptă acțiunile ulterioare.

Puteți seta un astfel de punct sau mai multe, în diferite părți ale codului. Deoarece eroarea apare în linia 42, este mai rezonabil să suspendăm execuția pe linia anterioară, 41. Mutați cursorul pe această linie, în orice loc.

Puteți seta un punct de întrerupere în mai multe moduri:

Ultimele două metode sunt cele mai convenabile, dar alegeți. În ambele cazuri, linia cu setul de puncte de întrerupere este colorată roșu:


Fig. 27,4. O linie cu punct de întrerupere

De asemenea, este mai convenabil să eliminați punctul de întrerupere în ultimele două moduri. Avem un breakpoint, apăsați din nou butonul "Run". Programul își începe activitatea, apăsăm butonul "Buton1".








Fig. 27,5. Șirul care va fi executat în continuare

Nu avem apeluri pentru funcții, deci putem folosi ambele . și (cele mai des utilizate - Pasul de ocolire).

Deci, faceți clic pe . iar debuggerul execută o linie cu punct de întrerupere și va șterge următoarea linie. Faceți clic din nou . iar această linie va fi evidențiată din nou - etapa ciclului a fost executată. Apăsând de mai multe ori . Vom realiza apariția pe ecran a aceleiași erori, care va bloca executarea ulterioară a programului. Se clarifică faptul că buclă rulează în mod normal mai multe treceri, după care apare o eroare. Include logica: în cadrul buclei, numai variabila i se modifică. atunci eroarea este oarecum conectată cu ea. Și de unde știi cum?

Aici, un alt instrument util de depanare vine în ajutorul nostru - monitorizarea valorilor variabilelor. Resetați programul cu comanda "Start -> Resetați depanatorul". Acum, apăsați butonul "Run" din nou, apoi butonul "Button1" din nou. Debuggerul a întrerupt din nou execuția programului pe linie cu ciclul, dar nu grăbiți să apăsați . Mai întâi, să adăugăm o privire la variabila i. Aceasta se face prin comanda "Run -> Add observation", care nu a fost disponibila pana cand programul a inceput sa fie executat. În linia "Expresie", specificați variabila i. și faceți clic pe "OK":

Cunoștințe, prelegere, testare și depanare


Fig. 27.6. Setarea observării unei variabile

Debuggerul observă acum valorile variabilei i. dar nu ne face mai ușor pentru noi - nu vedem aceste valori! Pentru a le vedea, trebuie să afișați fereastra Listă de observații. Aceasta se face prin comanda "Vizualizare -> ferestre de depanare -> fereastra de observare" sau "taste rapide" .

pe care trebuie să le calculam într-un ciclu. În fereastra Watchlist, veți vedea variabila i. și expresie. precum și semnificațiile acestora:


Fig. 27.7. Fereastra listei de observații

Din moment ce nu am fost încă atribuită o valoare de -3, în coloana cu valori, veți vedea cel mai probabil 1, care implicit a inițializat variabila noastră. Expresia va avea, de asemenea, o valoare corespunzătoare. Acum suntem gata să mergem mai departe. Faceți clic aici . În lista de observații, imediat imaginea sa schimbat - i este acum -3, iar expresia -3.33333 ...

Faceți clic aici Încă o dată. Din nou valorile s-au schimbat, acum i = -2. și expresia = -5. Înțelegem că ciclul funcționează și că au fost luați doi pași. Faceți clic aici încă de două ori. Acum variabila conține zero, iar valoarea expresiei indică "inf". Cu toate acestea, linia de calcul nu a fost încă executată, nu uitați de ea. Apăsați din nou . și din nou, avem o eroare. Și în valorile variabilei și expresiei, vedem cuvântul "evaluarea", care se traduce ca "evaluare". Acum putem vedea în mod clar acest lucru în linie

apare o eroare când variabila i este zero. Apoi, este ușor să ghiciți de ce apare această eroare - deoarece există o încercare de a împărți 10 cu 0.

Cunoștințe, prelegere, testare și depanare


Fig. 27,8. Mesajul de program rezultat

După cum puteți vedea, calculul. unde i este zero, a fost omisă.

Debuggerul încorporat are și alte instrumente cu care tu însuți poți în cele din urmă să înveți, experimentând cu ei.

Vă mulțumim pentru cursul minunat!

În lucrarea independentă numărul 2, când compilam modulul MyCript.pas (OS: Windows 7 x64, Lazarus 1.4 win64), se generează o eroare pentru codul de asamblare

mycript.pas (54,5) Eroare: Asm: [push reg32] combinație nevalidă de opcode și operanzi
mycript.pas (95,5) Eroare: Asm: [pop reg32] combinație nevalidă de opcode și operanzi

Înțeleg că cursul era pregătit pentru OS-uri pe 32 de biți, dar despre sistemele pe 64 de biți?

În procesoarele elementelor de meniu FileCreate și FileOpen, precum și în manualul de închidere a formularului OnClose, aceste trei proceduri conțin același cod

înainte de a crea un text nou>
dacă începe Memo1.Modified
// dacă utilizatorul este de acord să salveze modificările:
dacă MessageDlg ("Salvați fișierul"
"Fișierul curent a fost modificat. Salvați modificările? ',
mtConfirmation, [mbYes, mbNo, mbIgnore], 0) = mrYes atunci
FileSaveClick (Expeditor);
se încheie; // dacă

Permiteți-mi să întreb: nu ar fi mai bine să puneți codul într-o procedură separată, de exemplu - în cazul unui handler al evenimentului OnCloseQuery? În ceea ce îmi amintesc din experiența Delphi, chemarea acestei proceduri în sine nu trebuie să ducă la închiderea formularului. Deci, poate fi folosit în procedurile de curățare a Memo1 și citirea din fișier. Sau în Lazăr este imposibil de făcut?







Articole similare

Trimiteți-le prietenilor: