2010-10-19 14 views
5

Ive stava provando senza successo a connettere due debugger del client a un programma di debuggee nel contesto di JPDA. È possibile o ci sono soluzioni per farlo accadere?Connessione di debugger multipli a un debugger (Java, JPDA)

Sto usando eclipse come IDE (modifica per errore di battitura). pensare a un programma di server come un Ciao Mondo che stampa:

System.out.println("I have the String"); //1 
System.out.println("You will have to pass through the breakpoints before you shall see"); 
System.out.println("breakpoints"); 
System.out.println("before you shall see"); //4 

possiamo mettere i punti di interruzione in corrispondenza delle linee 1 e 4.

Fase 1: I params passati al programma di configurazione di esecuzione:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y 

(server=y dice vm a comportarsi come un server, suspend=y implica che l'esecuzione prog sarà sospeso fino al debugger si attacca ad esso) 0.123.ed esegui il programma.

Passo 2: Vai Debug as , Debug config ,Remote Java application e creare una nuova istanza:

Project: Same as before 
Connection type: Socket Attach(Socket Attach) 
Host:LocalHost 
Port:8000 

Ora, quando il debug esecuzione Prog si ferma al punto di interruzione specificato. Quello che non posso fare è creare un'altra istanza di questo debugger remoto che può attaccarsi al server (prog 1), ottengo una connessione rifiutata quando lo faccio. Fammi sapere se qualcun altro ha affrontato questo problema e se esiste una soluzione alternativa. Grazie!

Grazie

+0

Se è fattibile (cosa che davvero penso che non lo sia) non avrebbe molto senso tranne per le situazioni in cui un debugger ha agito come un maestro e gli altri l'hanno seguito per vedere come il processo si fermava ai punti di interruzione, catturato eccezioni et c. (Almeno non riesco a pensare a un buon uso, ma sono interessato a saperne di più) – Fredrik

+0

fwiw, avere le viste separate, come descrivi tu, mi sembra utile. Sarebbe davvero bello aprire alcune finestre jdb separate durante il debugging con jdb, una per il controllo, una per guardare alcune variabili, una per osservare la traccia dello stack, ecc. Ciò consentirebbe al debug della riga di comando di essere più simile a quello di Eclipse fa con più finestre. – NHDaly

risposta

1

mi risulta, ci può essere una sola istanza di debugger collegato ad un programma Java dato momento. Una volta avviato il programma in debug, Eclipse si connette al programma debug bloccando tutti gli altri tentativi di connessione. Se si desidera connettersi in remoto, è possibile eseguire il programma non in modalità di debug e aggiungere i parametri: -Xdebug -Xrunjdwp: transport = dt_socket, indirizzo = 8000, server = y, suspend = y ai parametri java manualmente, quindi si dovrebbe essere in grado di connettersi con un altro debugger.

+0

well L'idea di base è di consentire il debug di thread reciprocamente esclusivi all'interno dello stesso processo del server, provato manualmente per ottenere una connessione rifiutata. Esiste un protocollo esistente che consente l'ascolto su una nuova porta se una richiesta arriva a una porta esistente che sta servendo un'altra richiesta? (Modifica per punteggiatura) Grazie per i vostri commenti Yuval e Fredrick. – javaresearcher

+0

Inoltre mi sono imbattuto in: http://download.oracle.com/javase/6/docs/technotes/guides/jpda/jpda_spis.html#TransportDev che parla dello sviluppo di un TransportService per supportare più connessioni simultanee a un singolo indirizzo listener. Ora un'altra domanda è stata fatta da qualcuno o tentato di farlo? – javaresearcher

+0

@javaresearcher continua ad ascoltare su una porta dopo aver accettato una connessione non è un problema. Il problema qui è che renderebbe l'intero processo di debug estremamente intuitivo. Un po 'come guidare una macchina con tre passeggeri e una serie di volanti e pedali davanti a ciascun sedile. Solo uno sarebbe in grado di avere il controllo in un dato momento o le cose andrebbero terribilmente storte. Penso che avrebbe più senso se cercassi di spiegare perché stai provando a farlo. Forse c'è un modo molto migliore per fare quello che vuoi. (modifica: vedi la "idea principale" nel tuo commento principale ora ma perché due debugger?) – Fredrik

0

Sarebbe utile in un ambiente condiviso del server. Supponiamo che tu stia sviluppando un'enorme applicazione server e che ci sia solo un server di prova. Tutti gli sviluppatori si distribuiscono sullo stesso server condiviso. In questo contesto sarebbe corretto avere più connessioni di debug.

Ciò avrebbe particolarmente senso in un'applicazione server che sfrutta l'OSGI. Ogni sviluppatore dovrebbe codificare, distribuire, arrestare, avviare e eseguire il debug di un modulo diverso.

+0

Cosa succederebbe se due sviluppatori eseguissero il debug dello stesso modulo? –

0

Non so come sono andate le cose nel 2010, ma nel 2014 questo è fattibile. Sto debug di un applet e servlet, allo stesso tempo Eventough usano JVM diversa, per farlo basta avviare il processo di debug remoto in Eclipse come presa Ascolta, l'inizio del primo applicaction Java con:

-Xdebug -Xrunjdwp : trasporti = dt_socket, indirizzo = 127.0.0.1: 8787, sospendere = y

Quindi avviare la stessa eclissi processo di debug remoto e avviare un altro processo Java con le stesse opzioni, si dovrebbe vedere i processi depongono le uova in questo modo:

debug in eclipse

Si può vedere le due diverse JVM in ascolto nella stessa porta (non importa il nome del processo 'applet')