Windows 8上的Java 7 Debug无法正常工作

我正在尝试使用Java 1.7.0_21在Windows 8上调试applet。

我已将bleow添加到运行时参数中。

-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查看运行applet的实际进程,那就是java.exe。 我不知道javaw.exe是否只是产生java.exe然后死亡或什么,但标志永远不会传递到java.exe。

如果您转到控制面板中的Java选项卡,您曾经可以在那里添加另一个运行时。 好吧,你仍然可以,但是在单击OK然后在下一个对话框选项卡上应用,然后单击返回Java选项卡,您添加的运行时将消失。 我修改的所有设置都没有使浏览器插件获得传递的运行时参数,这使得无法在浏览器上下文中调试applet。

它差不多了!

因为我被卡住了,所以我很难做到:用我自己的java exe替换java exe,这迫使java进入调试模式

(请温柔这不是高品质的开发:))

  • 备份你的原始java.exe并用这个假的java替换它。
  • 不要忘记更新exeFile指向你的java目录
  • 不要忘记更新stdoutRedirectstderrRedirect
  • 使用编译选项-static-libgcc -static-libstdc++ for mingW

fakeJava.exe

 #include #include #include #include #include #include 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 

我设置了环境变量JAVA_TOOL_OPTIONS =“ – agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 8989”,因为它在bug中提示并且它为我做了伎俩(至少在Chrome中)

太阳虫数据库中有很多错误与此相关,似乎只能在java-8中解决(b97)以下是sun-bug的链接,它描述了完全相同的问题,这里是你可以找到的地方下载java-8 (b99是当前版本)