2. óra (2012.09.18.)
Diák
Feladatok
complex_orig.zip packagekbe szervezése a 21. diának megfelelően. Fordításhoz felsorolhatjuk az összes forrásfájlt a javac után vagy elég megadni a main metódust tartalmazó főosztályt vagy lásd alább a generikus megoldást. (feladat megoldása)
person_orig.zip kiegészítése, hogy forduljon a feladat. (feladat megoldása)
Command-line debug: lásd lent
Több packageből és osztályból álló projekt fordítása
A sok forrásfájlból álló programoknál a forrásfájlokat a fordítónak egyenként átadni elég macerás. Az egyik dolog, amit tehetünk, ha a main-t tartalmazó osztályt adjuk meg, mint egyetlen fordítandó osztály és a belőle hivatkozott osztályokat megkeresi és lefordítja a Java compiler.
javac [main függvény tartalmazó fájl neve]
Másik lehetőség, ha a forrásfájlok abszolút elérési útvonalából egy listafájlt készítenünk és azt átadjuk.
Windows:
dir /s /b *.java > [listafálj_neve]
Linux:
find -name *.java > [listafájl_neve]
Mac OSX:
find . -name "*.java" > [listafájl_neve]
Ezek után a fordítás:
javac @[listafájl_neve]
Hibakeresés (command-line debugging)
Az egyszerűség kedvéért egy korábbi példához nyúlunk vissza: printargs_debug.zip
A debugolás előtt úgy kell fordítanunk a programot, hogy a fordított bájtkód megőrizze a nyomkövetési információkat (-g kapcsoló):
javac -g PringArgs.java
Debugger indítása (továbbiakban a debugger shelljében ügyködve):
jdb
JDB-n belül breakpoint felvétele:
stop at PrintArgs:5
Program futtatása (osztálynévvel indítva):
run PrintArgs mici macko
Az előbbi indításnál fontos, hogy legyenek argumentumok felsorolva, különben nem ugrunk a ciklusmagba és a breakpoint érintése nélkül leáll a program.
A futtatást követően felfüggesztődik a program az első breakpoint elérésénél:
Breakpoint hit: "thread=main", PrintArgs.main(), line=5 bci=8 5 System.out.println((i + 1) + ". argumentum: " + args[i]);
Ezen a ponton a lokális változók listázásához:
locals
Továbbugrás a következő breakpointra:
cont
További parancsok:
help