簡體   English   中英

Windows 8上的Java 7調試不起作用

[英]Java 7 Debug on Windows 8 not working

我正在嘗試使用Java 1.7.0_21在Windows 8上調試applet。

我已將問題添加到運行時參數中。

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

當我嘗試連接時,在本地和遠程計算機上均出現“無法打開主機到端口5005的連接”錯誤。

如果我執行netstat -an,則看不到任何監聽5005的端口。 看來JVM沒有打開偵聽調試端口。

我已將端口添加到防火牆,甚至完全禁用了防火牆,但沒有區別。

這里有沒有其他人試圖在Windows 8上調試Java 7?

謝謝

我遇到了同樣的問題,可以稍微解決一下。 我還沒有解決方案,這就是為什么我來這里,但這可能有助於找到答案。

問題在於JRE正在啟動實際的運行時。 如果您在Java控制面板中查看可執行文件,它將是javaw.exe。 因此,您要在其中添加調試標志。 如果使用Process Explorer查看運行小程序的實際進程,則為java.exe。 我不知道javaw.exe是否只是產生java.exe然后死亡或什么,但是這些標志永遠不會傳遞到java.exe上。

如果轉到控制面板中的“ Java”選項卡,則以前可以在其中添加另一個運行時。 好的,您仍然可以,但是在單擊確定,然后在下一個對話框選項卡上應用之后,再單擊回到Java選項卡,添加的運行時將消失。 我修改的設置都沒有使瀏覽器插件獲得運行時參數的傳遞,這使得無法在瀏覽器上下文中調試applet。

做到了...差不多!

由於我被卡住了,所以我很難做到:用我自己的一個替換Java exe,這迫使Java進入調試模式

(請輕柔,這不是高質量的開發工具:))

  • 備份您原始的java.exe,並用這個偽造的Java替換它。
  • 別忘了更新exeFile指向您的Java目錄
  • 不要忘記也更新stdoutRedirectstderrRedirect
  • 使用編譯選項-static-libgcc -static-libstdc++用於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;
}

我設置環境變量JAVA_TOOL_OPTIONS =“ - agentlib:JDWP = =運輸dt_socket,服務器= Y,暫停= N,地址= 8989”,因為它在建議的bug ,它的伎倆對我來說(至少在鉻)

與此相關的sun bug數據庫中填充了很多bug,看來只有在java-8(b97)中才能解決。這是sun-bug的鏈接,描述了完全相同的問題,在這里您可以下載java-8 (當前版本為b99)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM