Gyakorlati alapok

Programozási molytalanítás avagy a debug üzemmód

 

A programozás során gyakran szembesülünk különféle belső programhibákkal (bugs), amelyek a program futását megakasztják. Legtöbbjük forrását valamelyik szoftveres rendszerszint képes detektálni (JVM vagy az Eclipse, súlyosabb esetben maga az operációs rendszer), ám a legalattomosabbak tökéletesen elrejtik magukat és mi csak a hibajelenséget érzékeljük.

 

Máskor -főként bonyolultabb algoritmusok tanulmányozásakor-, rendkívül hasznos lenne, ha az algoritmus lépéseit egyenként is tanulmányozhatnánk. A program futtatása (run) ezt alapértelmezésben nem teszi lehetővé, hiszen annak sebessége a számítógép erőforrásaitól függően mindig maximális sebességű. Adott tehát az igény egy olyan üzemmódra, amely programlépésről programlépésre lassítja le a futtatást, sőt meg is jeleníti a program aktuális állapotait, ezáltal tárva fel a program pillanatnyi belső összefüggéseit.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ezt a hibakereső, hibafeltáró, hibadetektáló üzemmódot debug üzemmódnak nevezzük.

 

Először nézzük meg azt a futtatható Java-kódot, amelyet most szemléltetés gyanánt használni fogunk. A kód nagyon egyszerű, de tartalmaz egy külső metódust is, amelyik voltaképpen a for ciklusban elkövetett folyamatos értékátadás (valtozo = i;) végeredményét írja ki.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void kulsoMetodus(int valtozo){
    System.out.println(valtozo);
}

public static void main(String[] args) {
    int valtozo = 0;
    for(int i = 1; i <= 5; i++){
        valtozo = i;
    }
    kulsoMetodus(valtozo);
    }
}

 

Végeredmény:

5

 

1.

Mivel a belső működés tanulmányozása a program futtatásakor (run)  alapértelmezésben nem lehetséges -hiszen annak sebessége a számítógép erőforrásaitól függően mindig maximális sebességű-, ezért először ki kell jelölnünk egy olyan kiindulópontot (valójában futási töréspontot /breakpoint/), ahonnan a debug üzemmód indulni fog. Ezt a kiválasztott kódsor mellett balra tehetjük meg a jobb egérgomb megnyomásával, majd a Toggle Breakpoint opció kiválasztásával. Ekkor a kódsor mellett balra egy kis kék kör fog megjelenni:

 

www.informatika-programozas.hu

 

A töréspontot a Disable Breakpoint kiválasztásával tudjuk megszüntetni.

 

2.

Ezután ki kell adnunk a Run - Debug (vagy F11) parancsot. Hatására debug üzemmódba váltunk, még pedig a törésponttól (Breakpoint) kezdve:

 

www.informatika-programozas.hu

 

Ha a töréspont nem a program elején helyezkedik el, akkor a program a töréspontig fog futni és ott megáll. Az Eclipse érzékeli a töréspontot és további információkat szolgáltat az aktuális körülményekről. Ugyanakkor megjelenik egy gombsor is, amely a debug üzemmód kezelésére hivatott. Közülük a legfontosabb gombok:

 

www.informatika-programozas.hu

Nagyon hasznos, ha a Window - Show View - Variables parancsot kiadva ilyenkor egy további ablakot is megjelenítünk, amelyik a program változóinak aktuális állapotait, tartalmait jeleníti meg:

 

www.informatika-programozas.hu

 

További érdekesség, hogy ezen ablakon belül a változók értékeit akár felül is írhatjuk:

 

www.informatika-programozas.hu

 

A fenti változó-felülírás hatására a konzolon végül nem 5, hanem 6 jelent meg:

 

Végeredmény:

6

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Rengeteg további lehetőségünk van debug üzemmódban, például a Step into segítségével gond nélkül beugorhatunk bármelyik olyan külső Java-osztályba, amelyikre a program hivatkozik (itt most a PrintStream osztály println() metódusára):

 

www.informatika-programozas.hu

 

Ezáltal pontosan azon kódokba tekinthetünk bele, amelyek magát a Java-rendszert műveltetik.