CATEGORII DOCUMENTE |
Editorul/Debugger-ul MATLAB
MATLAB-ul dispune de un editor propriu, editor care este asociat si cu un program de depanare (debugger). Editorul/debugger-ul ofera posibilitatea de a efectua operatiunile de editare de baza precum si accesul la instrumente de depanare a fisierelor .m .
Pachetul Editor/Debugger ofera si o interfata grafica usor de utilizat. Pentru lansarea editorului se tasteaza la prompterul MATLAB comanda edit. Se pot folosi si butoanele/meniurile accesibile din fereastra de comanda.
Setarea implicita a Editorului
Facilitatile de editare si depanare sunt setate sa fie active in mod implicit atunci cand MATLAB-ul este instalat.
Daca se doreste instalarea altui editor sau nu se doreste apelarea la depanarea in regim grafic se pot dezactiva aceste facilitati prin setarea corespunzatoare. De exemplu (in UNIX) se modifica ~home/.Xdefaults file:
matlab*builtInEditor: Off
matlab*graphicalDebugger: Off
Trebuie rulat
xrdb -merge ~home/.Xdefaults
inainte de pornirea MATLAB-ului.
Debugger-ul MATLAB. Exemple de depanare a fisierelor MATLAB
Debugger-ul permite identificarea erorilor de programare. Prin folosirea debugger-ului se poate vizualiza continutul workspace-ului in orice moment in timpul executiei unei functii si se poate executa programul (codul) MATLAB linie cu linie.
Pentru folosirea acestui instrument de depanare se poate utiliza interfata grafica a debugger-ului sau se pot folosi linii de comanda.
Depanarea permite corectarea a doua tipuri de erori:
Erori de sintaxa, cum ar fi scrierea incorecta a numelui unei functii sau omiterea unor paranteze. MATLAB-ul detecteaza majoritatea acestor erori si afiseaza un mesaj de eroare care descrie natura erorii si numarul liniei din programul .m in care a aparut eroarea respectiva.
Erori de rulare (de calcul), care sunt mai mult de natura algoritmica. De exemplu este posibil sa modificam o alta variabila decat trebuie sau sa efectuam un calcul incorect. Aceste erori sunt observate atunci cand fisierul rulat furnizeaza rezultate necorespunzatoare.
In timp ce erorile de sintaxa se corecteaza realtiv usor pe baza mesajelor de eroare, erorile de rulare sunt mai greu de depanat. Se pot utiliza in acest caz mai multe tehnici de depanare:
Se indeparteaza delimitatorii de tip punct si virgula de la sfarsitul liniilor program. Astfel la rularea programului vor fi afisate si rezultatele intermediare corespunzatoare fiecarei linii.
Se adauga comanda keyboard in fisierele .m care sunt depanate. Aceasta comanda opreste executia programului respectiv, da controlul la tastatura si da posibilitatea examinarii si schimbarii unor functii sau variabile. Acest mod de lucru este indicat printr-un prompter special: 'K>>.' Pentru a continua executia, se tasteaza return si se apasa apoi tasta Return.
Se foloseste Debugger-ul MATLAB.
Debugger-ul este util deoarece permite accesul la functiile din workspace, examinarea si eventual modificarea continutului acestora.
Debugger-ul permite setarea sau stergerea unor puncte de oprire: breakpoints, care sunt linii speciale in programul MATLAB la intalnirea carora executia se opreste si sunt posibile operatii de schimbare si de executie a liniilor de comanda una cate una.
Exemplu de depanare
Pentru a ilustra procedurile de depanare disponibile (indeosebi pentru cazul erorilor de rulare) vom folosi un exemplu preluat din MATLAB User Guide. Vom scrie un fisier denumit variance.m care este o functie avand ca intrare un vector si ca iesire un scalar. Fisierul apeleaza la o alta functie, numita sqsum, care calculeaza o suma medie patratica a vectorului de intrare.
function y = variance(x)
mu = sum(x)/length(x);
tot = sqsum(x,mu);
y = tot/(length(x)-1);
In fisierul sqsum.m se strecoara intentionat o eroare.
function tot = sqsum(x,mu)
tot = 0;
for i = 1:length(mu)
tot = tot + ((x(i)-mu).^2);
end
Pentru verificarea corectitudinii calculelor, folosim functia MATLAB std (calculeaza deviatia standard) care permite efectuarea unui calcul echivalent.
Se introduce mai intai un vector de intrare de test:
v = [1 2 3 4 5];
apoi se utilizeaza functia std:
var1 = std(v).^2
var1 =
2.5000
Incercam functia variance care apeleaza functia sqsum (scrisa eronat):
myvar1 = variance(v)
myvar1 =
1
Raspunsul este gresit. Vom incerca cu debugger-ul sa gasim si sa corectam greseala.
A. Pentru startarea procedurii de depanare:
Daca fisierul .m (adica variance.m) a fost creat cu editorul MATLAB si suntem in fereastra Editor/Debugger, se continua din acest punct.
Daca fisierul a fost creat cu un editor extern, se starteaza Editor/Debugger-ul si apoi se face click pe butonul Open M-file din toolbar.
Toolbar-ul Editor/Debugger contine o serie butoane descrise in continuare:
|
Scop |
Descriere |
Comanda
Echivalenta |
|
Seteaza/ Sterge Breakpoint |
Seteaza sau sterge un breakpoint pe linia pe care este pozitionat cursorul.
|
Dbstop/ Dbclear |
|
Sterge toate Breakpoint-urile |
Sterge toate breakpoint-urile care sunt setate in mod curent.
|
Dbclear all |
|
Step In (Pas in) |
Executa linia curenta a fisierului .m si daca linia este o apelare la alta functie sare (face un pas) in functia respectiva. |
Dbstep in |
|
Single Step (Un singur pas) |
Executa linia curenta a fisierului .m . |
Dbstep |
|
Continua |
Continua executia fisierului pana la terminare sau pana la alt breakpoint. |
Dbcont |
|
Sfarsit depanare |
Iesirea din starea de depanare.
|
dbquit |
Prin apasarea butonului din dreapta al mouse-ului in fereastra editorului se poate obtine un meniu cu toate aceste optiuni.
B. Setarea Breakpoint-urilor
Punctele de oprire
(breakpoint-uri) determina oprirea executiei fisierului la linia
specificata si permit evaluarea si schimbarea variabilelor din
workspace inainte de reluarea executiei. Breakpoint-ul este indicat
printr-un semn rosu de stop () inainte de linia respectiva.
Pentru exemplul considerat, la inceputul depanarii nu se stie unde ar putea fi eroarea, insa un loc logic de amplasare a unui breakpoint pentru a face verificari este in linia 4 a functiei variance.m:
y = tot/(length(x)-1);
Pentru setarea breakpointului se pozitioneaza cursorul pe linia 4 si se face click pe butonul din toolbar sau se alege Set Breakpoint din meniul Debug.
C. Examinarea variabilelor
Pentru verificarea variabilelor, se executa mai intai functia din fereastra de comanda:
variance(v)
Atunci cand executia programului ajunge la breakpoint, o sageata galbena orizontala () arata urmatoarea linie care va fi executata. Daca sageata galbena este verticala () atunci aceasta indica o pauza la sfarsitul unui script sau a unei functii si permite examinarea variabilelor inainte de reintoarcerea la functia principala.
Acum putem verifica valorile variabilelor mu si tot. Se selecteaza textul care contine variabilele si se face click din butonul drept al mouse-ului dupa care se alege din meniu Evaluate Selection.
In fereastra de comanda va fi afisat atat textul selectat cat si rezultatul:
K>> mu
mu =
3
K>> tot
tot =
4
Din analiza acestor valori se observa ca eroarea se afla in sqsum.
D. Schimbarea contextului spatiului de lucru
Se poate folosi meniul Stack pentru schimbarea contextului spatiului de lucru, adica pentru iesirea din functia variance si vizualizarea continutului workspace-ului, prin selectarea din meniu a optiunii Base Workspace:
Prin utilizarea comenzii whos sau a Browserului Workspace se vor vizualiza variabilele v si myvar1, ca de altfel si celelalte variabile create. Pentru intoarcerea la contextul spatiului de lucru local al functiei variance se selecteaza Variance din meniu.
E. Executarea pas cu pas a programului si continuarea executiei
Se sterge breakpoint-ul din linia 4 din variance.m prin plasarea cursorului pe linie si selectarea optiunii Clear Breakpoint din meniul Debug. Se continua executia programului cu Continue din meniul Debug.
Se deschide sqsum.m si se seteaza un breakpoint la linia 4 pentru verificarea buclei si a calculelor. Se ruleaza din nou variance. Executia se va opri acum la linia 4 din sqsum.
Se poate acum evalua indicele buclei i:
K>> i
i =
1
dupa care prin selectarea optiunii Single Step din meniul Debug se executa linia urmatoare. Se evalueaza variabila tot:
K>> tot
tot =
4
Se selecteaza din nou Single Step:
for i = 1:length(mu)
Se observa ca bucla este iterata numai pana la lungimea lui mu, care este scalar, si nu pana la lungimea lui x, vectorul de intrare (aceasta este de fapt greseala).
O data eroarea gasita se selecteaza Quit Debugging si se termina executia programului. Se sterge breakpoint din sqsum si se pune un breakpoint la linia 4 din variance.m, dupa care rulam din nou:
variance(v)
La oprirea executiei se seteaza valoarea lui tot la valoarea corecta (10):
K>> tot = 10
tot =
10
Selectam Continue Execution si obtinem rezultzatul corect.
F. Terminarea sesiunii de depanare
Se selecteaza Exit Editor/Debugger din meniul File si se termina sesiunea de depanare.
Pentru corectarea definitiva a erorii se foloseste editorul si se ruleaza din nou programul pentru o ultima verificare.
Folosirea facilitatilor de depanare se poate realiza si direct din linia de comanda, prin intermediul unui set de comenzi. Aceste comenzi sunt prezentate in forma lor generala in tabelul urmator.
Descriere |
Sintaxa |
Setarea unui breakpoint. |
dbstop at line_num in file_name |
Stergerea unui
breakpoint. |
dbclear at line_num in file_name |
Stop la atentionare,
eroare sau generarea de |
dstop if warning |
Reluarea executiei. |
Dbcont |
Listarea apelarii de
functii. |
Dbstack |
Listarea tuturor
breakpoint-urilor. |
dbstatus file_name |
Executarea a una sau mai multe
linii. |
dbstep nlines |
Listarea fisierelor M-file cu liniile numerotate. |
dbtype file_name |
Schimbarea contextului spatiului de lucru local (down). |
dbdown |
Schimbarea contextului spatiului de lucru local (up). |
dbup |
Parasirea modului de
depanare. |
dbquit |
Pentru informatii suplimentare privind utilizarea acestor functii se poate apela la comanda help urmata de numele comenzii respective.
Exemplul de depanare a unui fisier cu erori prezentat anterior poate fi reluat, utilizandu-se in locul interfetei grafice a debugger-ului comenzi corespunzatoare in linia de comanda.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2042
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved