2013-05-01 63 views
5

Tôi đang cố gắng gỡ lỗi một applet trên Windows 8 bằng cách sử dụng Java 1.7.0_21.Java 7 Debug trên Windows 8 không hoạt động

Tôi đã thêm lưu lượng vào thông số thời gian chạy.

Khi tôi cố gắng kết nối, tôi nhận được lỗi "Không thể mở kết nối với máy chủ lưu trữ, cổng 5005" trên cả máy cục bộ và từ xa.

Nếu tôi thực hiện netstat -an, tôi không thấy bất kỳ cổng nào nghe 5005. Có vẻ như JVM không mở cổng gỡ lỗi nghe.

Tôi đã thêm cổng vào tường lửa và thậm chí hoàn toàn vô hiệu hóa tường lửa, nhưng không có sự khác biệt.

Có ai khác ở đây đã cố gỡ lỗi Java 7 trên Windows 8 không?

Cảm ơn

+0

Có cùng một vấn đề; thực sự cố gắng di chuyển ra khỏi một applet nhưng chúng tôi đang mắc kẹt với nó bây giờ và với các bản Win8/Java7 mới vừa mới xuất hiện trên máy của chúng tôi, chúng tôi đang gặp sự cố khi gỡ lỗi để làm việc ... – f1dave

Trả lời

2

Tôi đang gặp sự cố tương tự và có thể gặp chút ít vấn đề. Tôi chưa có giải pháp, đó là lý do tại sao tôi đến đây, nhưng điều này có thể giúp tìm câu trả lời.

Sự cố trong thời gian chạy thực tế được JRE khởi chạy. Nếu bạn nhìn vào tệp thực thi trong bảng điều khiển Java, nó sẽ là javaw.exe. Vì vậy, bạn đang thêm các cờ gỡ lỗi vào đó. Nếu bạn sử dụng Process Explorer để xem xét quy trình thực tế đang chạy applet của bạn, đó là java.exe. Tôi không biết nếu javaw.exe chỉ là sinh sản java.exe sau đó chết hoặc những gì, nhưng những lá cờ không bao giờ được thông qua vào java.exe.

Nếu bạn chuyển đến tab Java trong bảng điều khiển, bạn đã sử dụng để có thể thêm một thời gian chạy khác tại đó. Vâng, bạn vẫn có thể, nhưng sau khi nhấp OK, sau đó Áp dụng trên tab hộp thoại tiếp theo, sau đó nhấp lại vào tab Java, thời gian chạy bổ sung của bạn sẽ biến mất. Không có cài đặt nào mà tôi đã sửa đổi đã làm cho plugin trình duyệt nhận được các tham số thời gian chạy được truyền, điều này khiến cho không thể gỡ lỗi ứng dụng trong ngữ cảnh trình duyệt.

+1

BTW, tôi nên đã thêm ... Đây là trên Windows 7 64-bit. Tôi không nghĩ rằng nó liên quan đến phiên bản của hệ điều hành, mà thay vào đó là phiên bản của JRE. Và trong trường hợp tôi không làm điều này rõ ràng, bạn không cần phải lộn xộn xung quanh với tường lửa hoặc bất cứ điều gì, hoặc ít nhất đó không phải là vấn đề chính ở đây. Vấn đề là Oracle đã tạo ra nó để bạn KHÔNG thể chuyển các tùy chọn dòng lệnh lên plugin, hoặc là cố tình hoặc vô tình (có thể là sau này). –

+0

Cùng một vấn đề ở đây, cùng một cấu hình. BTW Spanky và @ user2028936 tại sao bạn đang cố gắng gỡ lỗi? Về phía tôi, tôi có các vấn đề chữ ký (cảnh báo mã hỗn hợp) trên một applet đầy đủ chức năng và cảnh báo miễn phí trên các phiên bản trước của java 7 và 6 ... – Cerber

+0

@Cerber, tôi đang gỡ lỗi một applet mà chúng tôi sử dụng để tải lên dữ liệu hình ảnh y tế. Chúng tôi buộc phải sử dụng các applet vì hai lý do: hạn chế dữ liệu sandbox với hầu hết các công nghệ máy khách và ứng dụng một số thư viện kỹ thuật cao cấp (dcm4che, thư viện ẩn danh dữ liệu của chúng tôi) trên dữ liệu trước khi nó được tải lên hệ thống của chúng tôi. Đối với các vấn đề chữ ký, hãy thử chạy jarsigner -verbose -verify trên tất cả các lọ trong applet. Chúng tôi chưa thấy bất kỳ sự cố ký nào trên các phiên bản JVM gần đây, chỉ là sự cố gỡ lỗi này. –

2

Có phải ... gần như!

Kể từ khi tôi gặp khó khăn tôi đã làm nó theo cách cứng: thay exe java bởi một trong những của riêng tôi mà buộc java vào chế độ debug

(xin vui lòng được nhẹ nhàng đây không phải là dev chất lượng cao :))

  • sao lưu java.exe gốc của bạn và thay thế bằng java giả này.
  • đừng quên cập nhật exeFile để trỏ đến java của bạn dir
  • đừng quên cập nhật stdoutRedirectstderrRedirect quá
  • tùy chọn sử dụng biên soạn -static-libgcc -static-libstdc++ cho 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

Đó là tàn bạo, @Cerber :) Tôi sẽ cung cấp cho rằng một thử sau này. Tôi đã kết thúc việc tạo lại ngăn xếp trình duyệt đầy đủ (trừ JSObject) trong cấu hình gỡ lỗi applet IntelliJ. Tổng số đau ở cổ, nhưng nó hoạt động. Trong quá trình cố gắng giải quyết vấn đề này, bây giờ tôi đã hoàn toàn bricked Java trong trình duyệt trên máy Windows của tôi và chỉ có thể chạy các applet trong Firefox trên OS X! Tôi có thể gỡ lỗi ở đó (đó là 7u17) nhưng JVM bị treo ngay tại điểm mà tôi muốn bước qua mã của tôi:/ –

+0

@SpankyQuigman dùng thử javaRA để gỡ cài đặt của bạn: Tôi đã gạch và không được khai thác cũng như trong quá trình tạo phần mềm này : p http://singularlabs.com/software/javara/ – Cerber

1

tôi đặt môi trường JAVA_TOOL_OPTIONS biến = "- agentlib: jdwp = transport = dt_socket, server = y, suspend = n, địa chỉ = 8989" vì nó gợi ý trong bug và nó đã làm các trick cho tôi (ít nhất là trong Chrome)

Có rất nhiều lỗi chứa đầy lỗi cơ sở dữ liệu liên quan đến điều đó và có vẻ như nó chỉ được giải quyết trong java-8 (b97) Đây là liên kết đến sun-bug mô tả chính xác cùng một vấn đề và đây là nơi bạn có thể download java-8 (b99 là bản dựng hiện tại)

Các vấn đề liên quan