2013-05-01 18 views
5

Ich versuche, ein Applet auf Windows 8 mit Java 1.7.0_21 zu debuggen.Java 7 Debug unter Windows 8 funktioniert nicht

Ich habe die bleow den Laufzeitparametern hinzugefügt.

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 

Wenn ich versuche ich „offene Verbindung konnte nicht an den Host auf Port 5005“ Fehler auf lokalen und Remote-Rechnern erhalten zu verbinden.

Wenn ich einen netstat -an mache, sehe ich keinen Port 5005 zuhören. Es scheint, dass die JVM den abhörenden Debug-Port nicht öffnet.

Ich habe den Port der Firewall hinzugefügt und sogar die Firewall vollständig deaktiviert, aber keinen Unterschied.

Hat noch jemand hier versucht, Java 7 unter Windows 8 zu debuggen?

Dank

+0

Das gleiche Problem haben; wirklich versuchen, weg von einem Applet, aber wir sind für jetzt mit dieser Sache fest und mit den neuen Win8/Java7 Builds, die gerade auf unseren Maschinen angekommen sind, haben wir Probleme, Debugging zu arbeiten ... – f1dave

Antwort

2

ich das gleiche Problem habe und kann ein wenig Licht auf das Problem. Ich habe noch keine Lösung, weshalb ich hierher gekommen bin, aber das könnte helfen, die Antwort zu finden.

Das Problem liegt in der tatsächlichen Laufzeit, die von der JRE gestartet wird. Wenn Sie die ausführbare Datei in der Java-Systemsteuerung anzeigen, wird es javaw.exe sein. Sie fügen also die Debug-Flags hinzu. Wenn Sie Process Explorer verwenden, um den tatsächlichen Prozess anzuzeigen, der Ihr Applet ausführt, ist es java.exe. Ich weiß nicht, ob javaw.exe gerade java.exe erzeugt und dann stirbt oder was, aber die Flags werden nie an java.exe weitergegeben.

Wenn Sie in der Systemsteuerung auf die Registerkarte Java gehen, konnten Sie dort eine andere Laufzeit hinzufügen. Nun, Sie können das immer noch, aber nachdem Sie auf OK geklickt haben und dann auf die nächste Dialogregisterkarte geklickt haben, klicken Sie zurück auf die Registerkarte Java. Ihre Laufzeit ist dann verschwunden. Keine der Einstellungen, die ich geändert habe, hat das Browser-Plugin dazu gebracht, die Laufzeitparameter zu übergeben, was es unmöglich macht, das Applet im Browserkontext zu debuggen.

+1

BTW, sollte ich habe hinzugefügt ... Dies ist unter Windows 7 64-Bit. Ich glaube nicht, dass es mit der Version des Betriebssystems zusammenhängt, sondern mit der Version der JRE. Und für den Fall, dass ich das nicht klar gemacht habe, müssen Sie sich nicht mit der Firewall herumschlagen oder so etwas, oder zumindest ist das nicht das Hauptproblem hier. Das Problem ist, dass Oracle es so gemacht hat, dass Sie KEINE Befehlszeilenoptionen auf das Plugin geben können, entweder absichtlich oder versehentlich (eher letzteres). –

+0

Gleiches Problem hier, gleiche Konfiguration. BTW Spanky und @ user2028936 Warum versuchst du zu debuggen? Auf meiner Seite habe ich Signaturprobleme (gemischte Codewarnung) auf einem Applet, das auf früheren Versionen von Java 7 und 6 voll funktional und warnenfrei war ... – Cerber

+0

@Cerber, debugge ich ein Applet, das wir für das Hochladen benutzen medizinische Bilddaten. Wir sind gezwungen, Applets aus zwei Gründen zu verwenden: Sandbox-Datenrestriktionen mit den meisten Client-Technologien und Anwendung einiger High-Level-Technischer Bibliotheken (dcm4che, unsere eigenen Daten-Anonymisierungsbibliotheken) auf den Daten, bevor sie in unser System hochgeladen werden. Versuchen Sie für die Signaturprobleme, jarsigner -verbose -verify für alle Jars im Applet auszuführen. Wir haben in den letzten JVM-Versionen keine Signierprobleme gesehen, nur dieses Debug-Problem. –

2

Hat es ... fast!

Da ich bin fest ich es auf die harte Art und Weise tat ersetzt java exe von einem meiner eigenen, die Java in den Debug-Modus gezwungen

(bitte sanft sein, dies ist nicht hohe Qualität dev :))

  • Sichern Sie Ihre ursprüngliche java.exe und ersetzen Sie sie durch diese gefälschte Java.
  • vergessen Sie nicht exeFile zu aktualisieren, um Ihre Java-zu-Punkt dir
  • vergessen Sie nicht stdoutRedirect und stderrRedirect zu
  • Verwendung Kompilierungsoptionen -static-libgcc -static-libstdc++ für mingw

fakeJava zu aktualisieren.exe

#include<iostream> 
#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<time.h> 
#include<strings.h> 
int main(int givenArgc,char *givenArgv[]) 
{ 
    std::cout<<"step 0.a\n"; 
    char exeFile[] = "c:\\java\\jdk1.7.0_21\\bin\\java.exe"; 
    int prependArgc = 4; 
    char* prependArgv[] = { 
     "-Djava.compiler=NONE", 
     "-Xnoagent", 
     "-Xdebug", 
     "-Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=y" 
    }; 


    std::cout<<"step 0.b\n"; 
    time_t rawtime; 
    struct tm * timeinfo; 
    char date [80]; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 

    strftime (date,80,"%Y%m%d%H%M%S",timeinfo); 

    std::cout<<"step 0.c\n"; 
    char stderrRedirect[100]; 
    char stdoutRedirect[100]; 
    sprintf(stderrRedirect,"2>d:\\tmp\\%s-stderr.txt",date); 
    sprintf(stdoutRedirect,">d:\\tmp\\%s-stdout.txt",date); 

    std::cout<<"step 0.d\n"; 
    int appendArgc = 2; 
    char* appendArgv[] = { 
     stderrRedirect, 
     stdoutRedirect 
    }; 

    std::cout<<"step 0.e\n"; 
    int argc = prependArgc+givenArgc-1+appendArgc; 
    char** argv = (char**)malloc(argc*sizeof(char*)); 

    std::cout<<"step 1.a\n"; 
    char** src = prependArgv; 
    int nbItems = prependArgc; 
    int j = 0; 
    for(int i=0;i<nbItems;i++){ 
     argv[j++]=src[i]; 
    } 

    std::cout<<"step 1.b\n"; 
    src = givenArgv; 
    nbItems = givenArgc; 
    for(int i=1;i<nbItems;i++){ 
     argv[j++]=src[i]; 
    } 

    std::cout<<"step 1.c\n"; 
    src = appendArgv; 
    nbItems = appendArgc; 
    for(int i=0;i<nbItems;i++){ 
     argv[j++]=src[i]; 
    } 

    std::cout<<"step 3\n"; 
    char str[4096]; 
    strcpy(str,exeFile); 
    std::cout<<"step 4\n"; 
    for(int i =0;i<argc;i++){ 
     strcat (str," "); 
     strcat (str,argv[i]); 
    } 
    std::cout<<"step 5\n"; 
    std::cout<<"will run : "; 
    std::cout<<str; 

    std::cout<<"\nstep 6\n"; 
    system(str); 
    free(argv); 
    return 0; 
} 
+0

eingeschränkt worden sein soll Das ist brutal, @Cerber :) Ich werde das später versuchen. Am Ende habe ich den vollständigen Browser-Stack (minus JSObject) in der IntelliJ-Applet-Debug-Konfiguration neu erstellt. Total Schmerzen im Nacken, aber es funktioniert. Im Zuge der Umgehung dieses Problems habe ich jetzt Java im Browser auf meinem Windows-Rechner vollständig gemauert und kann nur Applets in Firefox unter OS X ausführen! Ich kann dort debuggen (es ist 7u17), aber die JVM stürzt genau an dem Punkt ab, an dem ich meinen Code durchgehen möchte:/ –

+0

@SpankyQuigman versuchen Sie javaRA, um Ihre Installation zu entsteinen: Ich mauerte und löschte meine auch im Prozess der Erstellung dieses weichen : p http://singullabors.com/software/javara/ – Cerber

1

stelle ich die Variable JAVA_TOOL_OPTIONS Umwelt = "- agentlib: JDWP = transport = dt_socket, server = y, suspendieren = n, Adresse = 8989", wie es in der bug vorgeschlagen und es hat für mich den Trick (zumindest in dem Chrome)

es gibt eine Reihe von Fehlern ist in Sonne Bugdatenbank zu, dass im Zusammenhang gefüllt, und es scheint es nur in Java-8 (b97) aufgelöst Hier ist der Link zum sun-bug, die genau beschreiben das gleiche Problem und hier ist der Ort, den Sie können download java-8 (B99 ist der aktuelle Build)