Domanda

Sto cercando potenzialmente un'API JDI per mettere in pausa la JVM in qualsiasi punto arbitrario durante la sua esecuzione. Guardando il BreakpoinTrequest Il metodo createBreakPoinTrequest richiede una posizione specifica. C'è qualche altra API che non ha bisogno di una posizione o in qualche modo per ottenere la posizione corrente che potrebbe essere passata per creare un punto di interruzione.

Fondamentalmente sto cercando un modo per allegare e mettere in pausa l'applicazione, quindi utilizzare l'agente JVMTI per ricevere il callback per l'evento Breakpoint per eseguire ulteriori elaborazioni. Grazie

È stato utile?

Soluzione

I punti di interruzione hanno senso solo con una posizione nella fonte. La pausa arbitraria è probabilmente fatta meglio sospendendo tutti i thread attualmente in esecuzione in JVM. Date un'occhiata al SuspendThreadList() o SuspendThread in jvmti. Questo meccanismo sarebbe la "pausa" che stai cercando.

Altri suggerimenti

Se vuoi mettere in pausa arbitrariamente un JVM in esecuzione con JDI, useresti l'interfaccia JDI Virtualmachine sospendere metodo.

Tuttavia, questo non ti dà molto in termini di essere in grado di connetterti a un agente JVMTI; Come sottolinea l'altra risposta, JVMTI ha i suoi metodi per fare la stessa cosa.

Se stai cercando un modo per definire callback arbitrari per i punti di interruzione, invece di chiamare un agente specifico, potresti essere interessato jdiscript, che è uno strato di scripting attorno al JDI che ti consente di fare queste cose abbastanza facilmente in Java dritto, piuttosto che dover cadere in C ++.

credo jdb - The Java Debugger sarà l'opzione migliore. Si prega di controllare l'URL sul jdb

http://docs.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top