Domanda

Mi chiedevo se esiste qualcosa (nel mondo Java) in grado di prendere uno snapshot dello stato attuale JVM con le seguenti caratteristiche:

  • farlo mentre un'eccezione viene gettata.
  • variabili locali di cattura, gli argomenti del metodo, ecc.
  • Mettere in un file a portata di mano che può essere utilizzato per estrarre o riprodurre in un IDE situazione nel codice sorgente.

Le prime due caratteristiche sono richieste (terzo sarebbe impressionante). E deve essere adatto per l'uso in produzione (quindi, non v'è alcun modo su debugger).

Prima di chiedere questo ho cercato attraverso il WWW (più a lungo possibile) e ho trovato alcune indicazioni:

  • Cajoon Interceptor : Come detto in Dzone posta , è un agente JVM passivo che soddisfano i tre requisiti! Ma, ha due aspetti negativi: si deve pagare per esso e il sito è giù (forse non v'è alcuna possibilità di pagare nulla)
  • .
  • AVIcode Intercept Studio : di Cajoon .NET equivalente. Giusto per dare qualche informazione circa.
  • JavaFrame : Ok, è un tweet, ma che punti a un repo SVN disponibili che avere il codice sorgente (licenza MIT) di un agente JVM che guarda bene (ho intenzione di dare una prova di esso).

Quindi, forse sto cercando una soluzione inesistente? Non è urgente, ma ho avuto questa idea per un progetto e sarebbe ideale per esplorare questo "sconosciuto" (?), Percorso e ottenere qualcosa di reale.

Sembra essere chiaro che sarebbe stato un agente JVM (evento di eccezione da JVMTI, per esempio ).

Infine, vorrei evidenziare il paragrafo followin da di Wikipedia articolo Gestione delle eccezioni :

  

In ambienti motore di runtime, come   Java o .NET, esistono gli strumenti che   allegare al motore di runtime e di ogni   volta che un'eccezione di interesse   Si verifica, registrano il debug   informazioni che esisteva in memoria   il tempo l'eccezione è stato gettato   (Chiamare valori pila e heap). Questi   gli strumenti sono chiamati eccezioni Automated   Manipolazione o di errore strumenti di intercettazione   e fornire 'delle cause' informazione   per le eccezioni.

Questa è l'idea. Spero che qualcuno mi può dare una certa comprensione o forse, in futuro, qualcuno trarre ispirazione da questo umile posta:)

Grazie!

È stato utile?

Soluzione

Io do un'occhiata alla JavaFrame e sembra un buon punto di partenza. Basta installare Apache Ant, fare ant nella directory javaframe e lanciare la suite di test (all'interno directory test) con:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

Non c'è alcuna variabile locale ma cerca. Quindi, come ho detto, può essere un punto di partenza. Spero di ottenere ulteriormente sul suo utilizzo, ma non c'è tempo e nessuna documentazione (ci sono un sacco di progetti denominati JavaFrame) sono circostanze cattivi.

Forse un giorno si può fare di nuovo. Sì, ancora una volta. C'era Cajoon, sembrava promettente e brillante, ma il suo sito web è giù e non c'è traccia di alcun vaso scaricabile da provare.

Grazie a tutti!

PD .: Solo per riferimento, alcuni link che ho trovato durante la ricerca:

Altri suggerimenti

Si consiglia di esaminare il lavoro che NetBeans ha fatto per quanto riguarda la registrazione uso automatizzato: http: // wiki. netbeans.org/UsageLoggingSpecification .

Per quanto riguarda il dumping fuori le variabili locali, mi immagino che si può semplicemente utilizzare un debugger, come ad esempio quella che bajafresh4life menzionato.

Forse potrebbe essere fatto con AspectJ ?

Non so se questo è fattibile in un ambiente di produzione, ma c'è il debugger onnisciente:

  

Che cosa succede se il vostro debugger potrebbe andare "tornare indietro nel tempo?" Vorrei che rendere più facile il debug? Con la semplice registrazione di tutte le assegnazioni delle variabili, è possibile fare essenzialmente questo. Questa è l'idea di base per il debugging onnisciente. La parte sorprendente è che di rilevanti dimensioni programmi possono eseguire il debug in questo modo - Ant, JUnit, il debugger stesso.

http://www.lambdacs.com/debugger/

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