[Modelinterpreter] Java debug

Dévai Gergely deva at elte.hu
Mon Mar 16 23:47:08 CET 2015


Sziasztok!

Elso"sorban a Java/Moka debug kapcsán érintettek figyelmébe:

A Moka execution engine-t a korábban megbeszélteknek megfelelo"en úgy 
szeretnénk megvalósítani, hogy a Java debugger szolgáltatásait 
használjuk. Ehhez szükség van egy olyan API-ra, ami képes egy VM-et 
indítani, breakpoint-okat manipulálni és debug eseményeket lekérdezni.

Máté tavalyi compiler-moka-jdi-javaUML2 
<https://plc.inf.elte.hu/modelinterpreter/trac/browser/experiments/compiler-moka-jdi-javaUML2> 
példája erre a célra a com.sun.jdi.VirtualMachineosztályt használja.
Ezzel kapcsolatban egyrészt felmerül, hogy nem kötjük-e magunkat hozzá 
ezáltal egy konkrét JVM megvalósításhoz?
Másrészt meg kell oldani a kapcsolódó függo"ség kezelését: A case study 
a lib könyvtárában tartalmazza az Oracle-to"l letöltheto" JDK-ból a 
tools.jar-t, ami tartalmazza a szükséges osztályokat. Kérdés, hogy egy 
eclipse projektben szabad-e a JDK egy részét binárisan terjeszteni? A 
weben írnak olyan véleményeket, hogy a JDK csak egyben terjesztheto". Ha 
nem csomagoljuk be ezt a jar-t, akkor meg el kell várnunk, hogy 
megfelelo" JDK legyen a felhasználóink gépén, és dinamikusan kell 
feloldaunk a függo"ségünket.
Ugyanakkor valamelyik org.eclipse.jdt.debug plugin-ban is megvannak a 
com.sun.jdi.... csomagok, ám ez nem része a plugin publikus API-jának, 
így ha ezzel oldjuk fel a függo"séget, akkor warning a jutalom. A 
veszély nyilván az, hogy ezt a részt bármikor átírhatják nem 
kompatibilis módon.

Azon tipródtam ma sokat, hogy lehetne-e használni a com.sun.jdi.* 
helyett az org.eclipse.jdt.* csomagok publikus API-ját? Ezek a csomagok 
standard eclipse pluginokban vannak, és JVM-függetlenül próbálnak Java 
szolgáltatásokat (többek között futtatás, debugolás) nyújtani. A 
breakpoint-ok elhelyezésénél még stratum beállítására leheto"séget adó 
függvényt is láttam. Az API használata nem triviális, mert többnyire egy 
halom interfészt nyújt, és elvárja, hogy a JVM implementációk extension 
pointokon keresztül adják az implementációt. Úgy tu"nik, hogy a 
JavaRuntime.getVMInstallTypes(), majd a 
IVMInstallType.createVMInstall(String id) függvényeken át lehet VM-et 
kapni. Boldi, a saját típusú Launch konfigrációk nem valami 
org.eclipse.jdt.launching alá tartozó típust adnak véletlenül?

Vélemények, segítség jöhet!

Üdv,
Gergo"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://plc.inf.elte.hu/pipermail/modelinterpreter/attachments/20150316/54893896/attachment.html>


More information about the Modelinterpreter mailing list