Se poate trece la capitolul următor cu tasta ► și se poate reveni la un capitol precedent cu tasta ◄

Depanarea (debugging) în Pascal


<

C
a
p
i
t
o
l
u
l

a
n
t
e
r
i
o
r

<

Să luăm un program simplu în vizor: conversia unui număr decimal în binar.

Conversie în binar

Acuma, dacă rulăm program (care nu e afișat în totalitate aici) vom observa că nu face exact ceea ce vrem:

Output program conversie în binar, Pascal

Este clar că 2 din baza 10 nu este 0 indiferent de bază în care facem conversia. Programul știm că e scris bine însă undeva ceva se întâmplă și trebuie să aflăm ce am greșit. În primul rând, de îndată ce nu știm unde e greșeala, vom alege o linie de unde să întrerupem executarea programului. Nu de tot ci doar cât să ne permită să vedem ce se întâmplă cu programul:

Poziționăm cursorul text pe prima linie după begin și alegem opțiunea Add Breakpoint din meniul DEBUG:

1

Va apărea următorul meniu:

Meniul DEBUG

Aici avem opțiunea de a întrerupe programul când are loc o anumită condiție (realizată de variabilele programului nostru) sau după ce se trece prin codul aferent liniei alese de un număr de ori. În cazul nostru nu ne trebuie nici o condiție și vrem programul să fie întrerupt imediat, deci 0 treceri prin punctul ales.

Numele fișierului și linia sunt deja alese.

Rezultatul e:

Linie de întrerupere în Pascal

... o linie roșie. De aici putem începe rularea programului pentru a-l depana. Pentru a face asta apăsăm CONTROL+F9.

 

Linia albastră ne va arăta unde suntem în execuția programului. De acum înaintăm cu tasta F8 - Step. Semnificația ei este că, dacă pe parcursul programului vom avea proceduri sau funcții, programul le va executa și nu vom intra în corpul lor. Cu F8 mergem, introducând valoarea 2 când ni se va cere, până la:

 

Aici intrăm în funcție cu F7 - Trace.

 

Și acuma suntem la începutul funcției. Aici ceva se petrece care nu e corect, și pentru asta trebuie să urmărim ce se întâmplă cu algoritmul pas cu pas, urmărind variabilele. Pentru asta avem Watches.

 

Aici putem adăuga variabilele care ne interesează: nNumc și s. Pentru asta alegem din meniul Debug - Add Watch. În meniul care apare doar scriem numele variabilelor. Facem asta de 3 ori.

 

Înafară de nNUm restul variabilelor nu sunt inițializate așa ca au valori aleatorii. De aici mergem cu F8 până când dăm de:

 

În momentul ăsta vedem ce nu e în regulă: nNum este 1 iar condiția de ieșire este nNum să fie egal cu 1. Dar nu am terminat fiindcă variabila noastră temporară este 0 în loc de 10, deci mai trebuie să trecem încă o dată prin while. Prima instrucțiune dacă o vom rula (c ia valoarea restului împărțirii lui 1 la 2, care e 0 - da, știu, este o explicație lungă), așadar, să zicem că nu știm exact ce trebuie să facem, dar hai să schimbăm condiția din nNum <> 1 în nNum <> 0:

Iar acuma rulăm programul de la început. Dacă îl modificăm în timp ce rulează (și programul în timpul depanării rulează doar că la fiecare linie se oprește execuția lui și revenim în Borland Pascal) este evident că programul trebuie recompilat și reexecutat.

 

Iar acuma vom avea rezultatele corecte. Depanare finalizată.

Ți-a fost de ajutor ce am scris aici?
Hei, mersi de răspuns.