2013-05-01 39 views
5

Próbuję debugować aplet na Windows 8 przy użyciu Java 1.7.0_21.Java 7 Debugowanie w systemie Windows 8 nie działa

Dodałem spadek do parametrów środowiska wykonawczego.

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

Kiedy próbuję połączyć otrzymuję „nie można otworzyć połączenia z hostem na porcie 5005” błąd na obu komputerach lokalnych i zdalnych.

Jeśli wykonuję netstat - nie widzę żadnego portu 5005 nasłuchującego. Wygląda na to, że JVM nie otwiera portu nasłuchującego nasłuchiwania.

Dodałem port do zapory, a nawet całkowicie wyłączyłem zaporę, ale bez różnicy.

Czy ktoś tutaj próbował debugować Javę 7 na Windows 8?

Dzięki

+0

Mając ten sam problem; Naprawdę staram się odsunąć od apletu, ale utknęliśmy z tym na razie i dzięki nowym wersjom Win8/Java7, które właśnie pojawiły się na naszych maszynach, mamy problemy z debugowaniem do pracy ... – f1dave

Odpowiedz

2

Mam ten sam problem i może trochę światła na ten temat. Nie mam jeszcze rozwiązania, dlatego przyjechałem tutaj, ale to może pomóc znaleźć odpowiedź.

Problem dotyczy rzeczywistego czasu uruchamiania uruchamianego przez środowisko JRE. Jeśli spojrzysz na plik wykonywalny w panelu sterowania Java, będzie to plik javaw.exe. Dodajesz do tego flagi debugowania. Jeśli używasz Process Explorer, aby sprawdzić rzeczywisty proces, w którym działa twój aplet, jest to plik java.exe. Nie wiem, czy javaw.exe właśnie tworzy plik java.exe, a następnie umiera lub co, ale flagi nigdy nie są przekazywane do java.exe.

Jeśli przejdziesz do zakładki Java w panelu sterowania, możesz w tym miejscu dodać kolejny czas uruchamiania. Cóż, nadal możesz, ale po kliknięciu OK, a następnie Zastosuj na następnej karcie dialogowej, a następnie kliknięciu z powrotem na karcie Java, Twój dodatkowy czas pracy zniknie. Żadne z zmodyfikowanych ustawień nie spowodowało, że wtyczka przeglądarki otrzymała parametry czasu pracy, co uniemożliwia debugowanie apletu w kontekście przeglądarki.

+1

BTW, powinienem dodałem ... To jest na Windowsie 64-bitowym. Nie sądzę, że jest to związane z wersją systemu operacyjnego, ale z wersją JRE. I na wypadek, gdy nie wyjaśniłem tego, nie musisz robić nic z zaporą ogniową ani nic takiego, a przynajmniej to nie jest główny problem. Problem polega na tym, że Oracle uczyniło to, że NIE można przekazywać opcji wiersza poleceń do wtyczki, celowo lub przypadkowo (co jest bardziej prawdopodobne). –

+0

Ten sam problem tutaj, ta sama konfiguracja. BTW Spanky i @ user2028936 dlaczego próbujesz debugować? Z mojej strony mam problemy z podpisami (ostrzeżenie o kodzie mieszanym) w aplecie, który był w pełni funkcjonalny i bez ostrzeżenia w poprzednich wersjach java 7 i 6 ... – Cerber

+0

@Cerber, debuguję aplet, którego używamy do przesyłania dane obrazowania medycznego. Jesteśmy zmuszeni używać apletów z dwóch powodów: ograniczenia danych sandbox z większością technologii klienckich i zastosowanie niektórych wysokopoziomowych bibliotek technicznych (dcm4che, nasze własne biblioteki anonimizacji danych) na danych przed ich przesłaniem do naszego systemu. W przypadku problemów z podpisami spróbuj uruchomić plik jarsigner -verbose -verify na wszystkich słoikach w aplecie. Nie widzimy żadnych problemów z podpisywaniem w ostatnich wersjach JVM, tylko ten problem z debugowaniem. –

2

Czy to ... prawie!

Ponieważ utknąłem zrobiłem mu hard way: exe java zastąpiony przez jednego z własną rękę, która zmusiła Java w trybie debugowania

(proszę być łagodne nie jest to wysokiej jakości dev :))

  • wykonaj kopię zapasową oryginalnego pliku java.exe i zastąp go tym fałszywym językiem Java.
  • nie zapomnij zaktualizować exeFile zwrócić do java reż
  • nie zapomnij zaktualizować stdoutRedirect i stderrRedirect too
  • użycie opcji kompilacji -static-libgcc -static-libstdc++ dla MinGW

fakeJava.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

To brutalne, @Cerber :) Spróbuję później. Zakończyłem odtwarzanie pełnego stosu przeglądarki (bez JSObject) w konfiguracji debugowania apletu IntelliJ. Całkowity ból szyi, ale działa. W trakcie próby obejścia tego problemu całkowicie zamurowałem Javę w przeglądarce na moim komputerze z systemem Windows i mogę uruchamiać aplety tylko w Firefoksie na OS X! Mogę tam debugować (to 7u17), ale JVM zawiesza się w punkcie, w którym chcę przejść przez mój kod:/ –

+0

@SpankyQuigman wypróbuj javaRA, aby usunąć instalację: Zablokowałem i usunąłem kopalnię w procesie tworzenia tego miękkiego : p http://singularlabs.com/software/javara/ – Cerber

1

ustawić zmienną środowiskową JAVA_TOOL_OPTIONS = "- agentlib: JDWP = transportową = dt_socket, server = y, zawiesić = n, address = 8989", jak to sugerowano w bug i to załatwiło sprawę do mnie (przynajmniej w Chrome)

jest dużo błędów wypełnione bugs słońce bazy związanego z tym, i wydaje się, że tylko rozwiązane w java-8 (B97) Oto link do sun-bug które opisują dokładnie ten sam problem: i tutaj jest miejsce, w którym można download java-8 (b99 to aktualna wersja)

Powiązane problemy