Debuggerul – o noutate in MT5

February 28, 2010
By Bogdan Baltatu, MQLmagazine editor

[English version] [MQLmagazine.com in english] [Editia romaneasca]

Una dintre inbunatatirile aduse de MetaQuotes platformei de dezvoltare MetaEditor este introducerea unui debugger.

Pe parcursul articolului voi folosi cuvantul ‘eroare’ ca referinta pentru erorile de gandire ale codului cum ar fi conditii scrise gresit , expresii de calcul gresit , .. Atentie: nu le confundati cu erorile pe care le intoarce compilatorul.

Pentru cei care nu stiu scopul debuggerului este de a rula linie cu linie codul pentru a gasi erorile conceptuale de programare, totodata si pentru a vedea in timp real valoarea variabilelor.

In lipsa unui Debugger, in MT4, programatorii se foloseau de functia Print pentru a gasi erorile in cod , aceasta fiind singura metoda. Aceasta metoda este foarte greoaie si timpul de depistare al erorii este mult mai mare decat in cazul folosirii unui Debugger pentru ca functia Print necesita compilarea de fiecare data a codului , atasarea lui pe ecran si citirea in loguri pentru a vedea ce a scris functia Print. In cazul in care in cod apelam functii care dadeau un rezultat gresit (functia era prost scrisa) trebuia sa ne ducem si in functia respectiva sa punem si pe acolo linii de Print pentru a vedea unde este eroarea. Dupa depistarea erorii trebuia curatat codul de liniile de Print folosite in scopul identificarii erorii.

Momentan debuggerul merge doar pe testarea scripturilor, dar credem ca va fi integrat in Strategy Tester pentru a functiona pe experti. Acest lucru este necesar si pentru ca anumite module cu probleme ale expertilor pot sa fie executate numai in conditii rare de piata, care nu vor aparea in testarea forward, dar vor fi revelate in timpul backtestului.

Acum lucrurile s-au simplificat, din aceeasi fereastra se poate urmari functionarea programului prin parcurgerea linie cu linie a codului.

Pentru a folosi debuggerul trebuie ca in cod acolo sa apelam functia DebugBreak() acolo unde dorim sa oprim executia in viteza pentru a trece la executia linie cu linie. Daca atasam pe chart un script care are in cod apelata functia de oprire a debuggerului acesta nu se va opri din executie , functia oprind codul doar cand se porneste modul debug din meniul MetaEditor.

Pentru a porni scriptul pentru debug se apasa pe Debug->Start sau pe tasta F5 sau pe butonul dedicat din bara special dedicata debuggerului , bara in care se mai gasesc si 3 butoane pentru parcurgerea codului.

MT5Debugger

Grupul de butoane care se afla in dreptunghiul numerotat cu 1 sunt cele 6 butoane care se folosesc la debug. Primele 3 butoane sunt pentru a intra si iesi in/din modul debug , dar si pentru a pune pauza. Utimele 3 butoane sunt pentru a parcurge codul in modul debug dar in mai multe moduri:

- parcurgand codul cu Step Into (F11) parcurgem linie cu linie dar intram in functiile la care se face referire. De exemplu daca suntem cu cursorul pe linia ‘p=prod(a,b)’ si apasam Step Into atunci cursorul o sa se duca in functia ‘prod’ si vom putea parcurge linie cu linie codul aceste functii;

- parcurgand codul cu Step Over(F10) parcurgem linie cu linie codul , dar debuggerul va sari functiile apelate (vor fi executate, dar nu linie cu linie intr-un mod debug);

-Step Out ar trebui sa iasa din functia in care suntem cu cursorul dar sa nu iasa din modul debug , lucru care se intampla acum.

Sageata verde notata cu 2 reprezinta linia pe care ne aflam in momentul curent. Daca apasam pe F10 (Step Over) sagetica se va muta pe linia urmatoare.

Ruland un cod in modul ‘Debug’ se deschide o noua pagina in pageframeul Toolbox care este impartita in doua (zonele 3 si 4).

In zona 3 vedem numele fisierului in care ne aflam , numele functiei dar si numarul liniei pe care suntem in modul debug.

Zona 4 este similara cu fereastra Watch din Borland C++ si Borland Pascal, sau alte medii de dezvoltare mai vechi , si in ea se pot urmari valoarea variabilelor dar si tipul lor.

In poza de mai sus in zona 4 avem 3 variabile pe care le urmarim : a, s si p. Variabila ‘a’ are valoare 5 deoarece am trecut de linia ‘a=5′ unde initializam variabila cu 5. Variabila ‘p’ are valoarea 0 , deoarece asta e valoarea implicita pe care o iau variabilele de tip integer cand le definesc , iar ’s’ este nedefinita, pentru ca chiar acolo s-a oprit executia, inainte de declararea ei.

Acestea fiind spuse va doresc mult succes la scrierea codurilor si debugging.

Leave a Reply