Sto tentando di eseguire il debug di un problema nella mia applicazione Java che non genera errori, senza eccezioni e nemmeno arresta l'app in modo anomalo (sembra che l'errore si verifichi in un thread separato).Come si esegue il debug degli errori invisibili nelle applicazioni Java?
Il problema sembra essere all'interno di una chiamata a una funzione di libreria (è JAXBContext.newInstance(String)
se ciò è importante). Il programma raggiungerà la linea appena prima della chiamata, ma non quella subito dopo. I miei blocchi catch
non sono stati inseriti e il programma continua a funzionare.
Il problema si verifica durante il tentativo di eseguire il rendering di una risposta XML a una richiesta Web inviata tramite Struts. La richiesta è stata gestita e il codice deve eseguire il marshalling dell'oggetto risposta. Il client riceve subito una risposta (quindi il codice non sembra bloccarsi in un ciclo), ma è solo vuoto.
Ho impostato un punto di interruzione poco prima della riga problematica ma il debugger ci passa sopra, non ho idea del perché.
Sto usando eclipse e l'applicazione viene eseguita all'interno di un contenitore OSGi (Apache Felix) che è stato avviato con -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
. Da dentro Eclipse I quindi utilizzare le impostazioni di debug per "Remote Java application" per connettere il debugger.
Quali sono le tecniche per ottenere un simile problema?
Sei sicuro che l'IDE punta allo stesso codice sorgente che formava i binari sul server? –
Sì, è tutto nella mia macchina locale e il contenitore OSGi sta eseguendo il codice direttamente dalla directory di output del mio IDE. –
Non conosco il contenitore OSGi, come JBoss sposta i file binari distribuiti in un'altra directory? Proverei a modificare il codice, un System.out.println o qualcosa di simile, quindi assicurati che venga eseguito per confermare questo. Normalmente ho trovato che le linee di codice saltate del debugger indicano che l'IDE e il server non sono sincronizzati l'uno con l'altro. –