[英]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進入調試模式
(請輕柔,這不是高質量的開發工具:))
exeFile
指向您的Java目錄 stdoutRedirect
和stderrRedirect
-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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.