Per eseguire il debug del caricamento delle classi in una JVM, è possibile utilizzare il parametro -verbose:class
, ma ... Qualcuno sa come eseguire il debug del caricamento delle risorse (ad esempio i file delle proprietà)?Come eseguire il debug del caricamento delle risorse JVM?
risposta
Suppongo che sia necessario utilizzare un profiler. O qualcosa che usa l'interfaccia della strumentazione.
Non sono sicuro di quanto sia stabile, ma c'è BTrace, che è una specie di versione Java di DTrace.
BTrace è uno strumento di tracciamento sicuro e dinamico per la piattaforma Java. BTrace può essere utilizzato per tracciare dinamicamente un programma Java in esecuzione. BTrace strumenta dinamicamente le classi dell'applicazione di destinazione per iniettare il codice di tracciamento ("tracciato bytecode"). Il codice di traccia è espresso nel linguaggio di programmazione Java.
Se si esegue questa operazione su un computer di sviluppo e il numero di eventi (risorse in corso di caricamento) non è troppo frequente, è possibile anche impostare un punto di interruzione nel debugger.
Le risorse sono fornite come URL
s. Quindi, immagino di farlo in Java "puro": installa un numero personalizzato ClassLoader
che copia URL
s in una versione con un numero personalizzato URLStreamHandler
. Inserisci il codice di monitoraggio nel gestore di streaming e inoltralo all'originale.
In un ambiente Linux si può provare:
lsof -p <jvm pid>
che vi darà una lista con i descrittori utilizzati dal programma associato al pid specificato.
Il problema è che molte risorse possono essere caricate da un singolo file jar, che potrebbe essere aperto solo una volta. – erickson
Sono d'accordo, in questo caso penso che l'opzione migliore sia quella di andare con la soluzione ClassLoader –
Si potrebbe utilizzare InTrace allo strumento delle classi classloader che fanno il carico.
Per il Sun JVM, vi suggerirei di usare i seguenti Includi modelli di tracciare classi appropriate:
- ClassLoader
- URLClassPath
- Loader
esistono un paio di tecniche per debug problemi di classe . Qui ci sono buoni diapositive dalla creatori JRebel sintetizzano quelle tecniche: Do you really get class loaders?
il link è morto –
@FastSnail: sembra si trasferirono a Github. Link aggiornato. – Thilo