<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Sziasztok!<br>
<br>
Elsősorban a Java/Moka debug kapcsán érintettek figyelmébe:<br>
<br>
A Moka execution engine-t a korábban megbeszélteknek megfelelő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.<br>
<br>
Máté tavalyi <a class="dir" title="View Directory"
href="https://plc.inf.elte.hu/modelinterpreter/trac/browser/experiments/compiler-moka-jdi-javaUML2">compiler-moka-jdi-javaUML2</a>
példája erre a célra a <span class="nn">com.sun.jdi.VirtualMachine</span><span
class="o"> osztályt használja.<br>
Ezzel kapcsolatban egyrészt felmerül, hogy nem kötjük-e magunkat
hozzá ezáltal egy konkrét JVM megvalósításhoz?<br>
Másrészt meg kell oldani a kapcsolódó függőség kezelését: A case
study a lib könyvtárában tartalmazza az Oracle-től letölthető
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 terjeszthető. Ha nem csomagoljuk be ezt a jar-t,
akkor meg el kell várnunk, hogy megfelelő JDK legyen a
felhasználóink gépén, és dinamikusan kell feloldaunk a
függőségünket.<br>
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üggő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.<br>
<br>
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 lehető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 tű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?<br>
<br>
Vélemények, segítség jöhet!<br>
<br>
Üdv,<br>
Gergő<br>
<br>
</span><span class="o"> </span>
</body>
</html>