2009-03-26 5 views

risposta

22

È simile a qualsiasi altro processo Java che si desidera eseguire il debug in remoto: è necessario impostare alcuni argomenti per la VM (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 ) e quindi connettersi alla porta specificata. In Java webstart 6.0 questo può essere fatto con l'opzione -J, nella versione precedente tramite la variabile d'ambiente JAVAWS_VM_ARGS. Vedere i dettagli here.

+0

Solo una nota: utilizzando Ubuntu 10.04 e 12.04 e webstart 6.0, ha funzionato solo dopo aver impostato il parametro ** server = y **. In caso contrario, ho ricevuto l'errore 'ERROR: JDWP Transport dt_socket non riuscito a inizializzare, TRANSPORT_INIT (510)', anche se la porta non era in uso. –

1

Hai provato a stampare un registro di debug? Questa è una cosa utile da avere in ogni caso e potrebbe aiutare in questo caso.

Se si desidera eseguire il debug vero, vedere ad es. qui: How can I debug under WebStart?

+0

È davvero bello avere il controllo diretto su tutti gli aspetti dell'esecuzione della JVM ... E puoi anche cercare tutte le cose che WS Launcher aggiunge dalla sua schermata iniziale dopo averlo eseguito ... –

21

Avviare manualmente la VM JWS. In questo modo puoi fornire i parametri di avvio per aprire la porta di debug. Ecco un description, va in questo modo:

set JAVAWS_TRACE_NATIVE=1 
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n" 
javaws http://server:port/descriptor.jnlp 
+1

+1 per una risposta fantastica. Tuttavia, questa cosa non mi consente di modificarlo per correggere un refuso nella risposta. Non dovrebbe esserci spazio prima dell '"indirizzo = 8989". – fool4jesus

+0

@mkoeller in javaws http: // server: port/descriptor.jnlp quale numero di porta devo dare a – Rekha

+5

Solo una nota, in Windows (Testato su XP) quando imposti 'JAVAWS_VM_ARGS' devi OMITARE LE DOPPIE QUOTE' set JAVAWS_VM_ARGS = -Xdebug -Xnoagent -Djava.compiler = NONE -Xrunjdwp: transport = dt_socket, indirizzo = 8989, server = y, suspend = n' –

9

Si può anche fornire il parametro di debug all'eseguibile javaws utilizzando l'opzione -J

Esempio:

javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp 
1

per eseguire il debug di un Web Avvia l'applicazione in Linux, crea uno script di shell ~/bin/javaws-debug.sh con l'invocazione di javaws in modalità debug come descritto sopra:

~/bin/javaws-debug.sh:

#!/bin/sh 
export JAVAWS_TRACE_NATIVE=1 
export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE 
    -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n" 
javaws "[email protected]" 

Quindi, nel browser, selezionare quello script come applicazione da richiamare su file jnlp.

Ad esempio, in Firefox, andare a Modifica → Preferenze → Applicazioni, Tipo di contenuto: Java Web Start e selezionare "Usa altro" in Azione e selezionare lo script dalla finestra di dialogo "Seleziona applicazione di supporto". In Chrome, devi modificare le impostazioni di sistema di Linux. In KDE, vai su Impostazioni di sistema → Associazioni di file, Tipi noti: applicazione: x-java-jnlp-file, aggiungi una nuova applicazione, seleziona ~/bin/javaws-debug.sh da "Scegli applicazione per applicazione/x-java -jnlp-file "dialog.

Una volta che il browser sia configurato, applicazione Java Web Start iniziare a utilizzare l'involucro, che consentirà debugger per connettersi sulla porta 8989.

12

Per quanto riguarda le nuove versioni di Java (Java 8u20 + e Java 7u70 +) Ho sperimentato che parametri come -Xrunjdwp non possono essere passati direttamente né usando JAVAWS_VM_ARGS. Messaggio Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ha iniziato a comparire in uscita console.

L'unica soluzione che ha funzionato per me era passare quegli argomenti nella variabile di sistema JAVA_TOOL_OPTIONS.

+1

Grazie per averlo scritto, l'hai risolto per me. Necessario eliminare le opzioni di debug da JAVAWS_VM_ARGS e spostarle in JAVA_TOOL_OPTIONS quando si passa da 1.7.0_10 a 1.7.0_75 –

+0

Questo ha funzionato anche per me, ho diversi jdks sulla mia macchina, quindi non so mai quale verrà avviato: - | – bakoyaro

+2

Ho provato questo, ma una sorta di controllo di sicurezza deve aver impedito l'avvio dei miei javaws (con JAVA_TOOL_OPTIONS non si avviava, senza che questo sarebbe iniziato). –

1

Con Java 8 e Windows 10, prompt dei comandi aperto (cmd.exe) e digitare questo:

set JAVAWS_TRACE_NATIVE=1 
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 
javaws java-app.jnlp 
2

Sarà necessario effettuare le seguenti operazioni:

  1. abilitare il log di Java e rintracciare in Control Panel Java> Avanzate. Java Control Panel: logs and tracing

  2. Abilita parametri per il debug di Java & lancio del JNLP (problemi ossia con TLS/SSL stretta di mano come close_notify o handshake_failure opzionale ma utile), ci sono due modi per farlo:

    2.a. Scarica il file JNLP ed eseguilo dalla riga di comando (il comando SET non è richiesto in questo caso particolare).

    set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all 
    javaws -wait jnlp.jnlp 
    

    2.b. Aggiungi argomenti (cioè -Djavax.net.debug=all) per la JVM nel Pannello di controllo di Java> Java> View (questo non è necessario in questo particolare), e lanciare il file JNLP dal browser:

    Java Control Panel: jvm arguments

  3. I registri e le tracce si trovano nella directory log da Java Deployment Home da dove ho incollato queste posizioni:

    a. Windows XP: %HOME%\Application Data\Sun\Java\Deployment

    b. Windows 7/Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    c. Linux/Solaris: %HOME%/.java/deployment

Con javax.net.debug = tutto quello che vedrà la stretta di mano se il barattolo all'interno del jnlp viene caricato da una connessione HTTPS. Questo tipo di problemi è difficile da eseguire.

... 
%% No cached client session 
*** ClientHello, TLSv1.2 
... 
*** 
... 
Java Web Start Main Thread, received EOFException: error 
Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
Java Web Start Main Thread, SEND TLSv1.2 ALERT: fatal, description = handshake_failure 
Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2 
Java Web Start Main Thread, called closeSocket() 
#### Java Web Start Error: 
+1

Si confonde il debug con la registrazione/traccia. – Horcrux7

+0

@ Horcrux7 hai ragione. Penso che il logging possa essere visto come un modo di debugging :) – lmiguelmh