我正在尝试使用Java 1.7.0_21在Windows8上调试一个小程序。
我已经将bleow添加到运行时参数中。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 当我尝试连接时,在本地和远程机器上都得到“无法打开到主机的连接,在端口5005上”错误。
如果我执行netstat -an,我看不到任何端口5005侦听。JVM似乎没有打开侦听调试端口。
我已经将端口添加到防火墙,甚至完全禁用了防火墙,但没有区别。
这里有没有人尝试过在Windows8上调试Java 7?
谢谢
发布于 2013-05-04 00:51:34
我也有同样的问题,我可以稍微了解一下这个问题。我还没有一个解决方案,这就是我来这里的原因,但这可能有助于找到答案。
问题出在由JRE启动的实际运行时。如果您查看Java控制面板中的可执行文件,它将是javaw.exe。所以你要把调试标志加进去。如果使用Process Explorer查看正在运行小程序的实际进程,则该进程为java.exe。我不知道javaw.exe是不是只是产生了java.exe,然后就死了,或者别的什么,但这些旗帜永远不会传递给java.exe。
如果您转到控制面板中的Java选项卡,您过去可以在那里添加另一个运行时。当然,您仍然可以,但是在单击OK然后在下一个对话框选项卡上应用之后,再单击back到Java选项卡,您添加的运行时将会消失。我修改的这些设置都没有使浏览器插件获得传递的运行时参数,这使得在浏览器上下文中调试applet变得不可能。
发布于 2013-05-07 22:31:02
是不是...差一点!
因为我被卡住了,所以我做了一件很艰难的事情:用我自己的程序代替了java exe,这迫使java进入调试模式。
(请温柔点,这不是高质量的dev :)
exeFile以指向您的java目录stdoutRedirect和stderrRedirect <代码>H29<代码>H110使用编译选项<代码>D11<代码>H212<代码>F213fakeJava.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;
}发布于 2013-07-24 18:37:22
我按照bug中的建议设置了环境变量JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8989,它为我做到了这一点(至少在Chrome中是这样的)
sun bugs数据库中有很多与此相关的bug,似乎只在java-8 (b97)中解决了这个问题这里是到sun-bug的链接,它描述了完全相同的问题,这里是你可以download java-8的地方(b99是当前的版本)
https://stackoverflow.com/questions/16315892
复制相似问题