Windows 8上的Java 7调试不工作

Windows 8上的Java 7调试不工作,java,debugging,windows-8,applet,java-7,Java,Debugging,Windows 8,Applet,Java 7,我正在尝试使用Java1.7.0\u21调试Windows8上的小程序 我已将bleow添加到运行时参数中 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 当我尝试连接时,在本地和远程计算机上都出现“无法打开到主机的连接,端口5005”错误 如果我使用netstat-an,我看不到任何端口5005正在侦听。JVM似乎没有打开侦听调试端口 我已经将端口添加到防火墙,甚至完全禁用了防火墙,但没有区别 这里还有人

我正在尝试使用Java1.7.0\u21调试Windows8上的小程序

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

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 
当我尝试连接时,在本地和远程计算机上都出现“无法打开到主机的连接,端口5005”错误

如果我使用netstat-an,我看不到任何端口5005正在侦听。JVM似乎没有打开侦听调试端口

我已经将端口添加到防火墙,甚至完全禁用了防火墙,但没有区别

这里还有人试过在Windows8上调试Java7吗


谢谢

我也有同样的问题,我可以稍微解释一下这个问题。我还没有解决办法,这就是我来这里的原因,但这可能有助于找到答案

问题在于JRE启动的实际运行时。如果查看Java控制面板中的可执行文件,它将是javaw.exe。因此,您要将调试标志添加到该文件中。如果使用Process Explorer查看运行小程序的实际进程,则它是java.exe。我不知道javaw.exe是否只是在生成java.exe,然后就死了,或者是什么,但是这些标志永远不会传递到java.exe上

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

做到了。。。差不多了

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

(请温柔一点,这不是高质量的dev:)

  • 备份您原来的java.exe并用这个伪java替换它
  • 不要忘记更新
    exeFile
    以指向您的java目录
  • 不要忘记更新
    stdoutRedirect
    stderredirect
  • 对mingW使用编译选项
    -static libgcc-static libstdc++
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;
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int givenArgc,char*givenArgv[]
{ 

std::cout我按照中的建议设置了环境变量JAVA_TOOL_OPTIONS=“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8989”,它为我做了一些调整(至少在Chrome中是这样)

sun bugs数据库中有许多与此相关的bug,似乎只有在java-8(b97)中才能解决 下面是到的链接,它描述了完全相同的问题
这里是您可以使用的地方(b99是当前版本)

顺便说一句,我应该加上……这是在Windows 7 64位上。我不认为这与操作系统的版本有关,而是与JRE的版本有关。如果我没有说清楚,你不需要乱搞防火墙或其他任何东西,或者至少这不是这里的主要问题。问题是Oracle这样做是为了让你能够n不将命令行选项传递到插件上,无论是有意还是无意(更可能是后者)。这里的问题相同,配置相同。顺便说一句,Spanky和@user2028936为什么要调试?在我这方面,我有签名问题(混合代码警告)在java 7和6的早期版本中,在一个功能齐全且无警告的小程序上…@Cerber,我正在调试一个用于上传医学影像数据的小程序。我们被迫使用小程序有两个原因:大多数客户端技术的沙盒数据限制和一些高级技术库的应用(dcm4che,我们自己的数据匿名库)在数据上传到我们的系统之前,对其进行验证。对于签名问题,请尝试在applet中的所有jar上运行jarsigner-verbose-verify。在最近的JVM版本中,我们没有看到任何签名问题,只是这个调试问题。lol,世界很小:我的也是一个医疗applet。我发现问题的根源不在签名本身但是在browserapplet interco(又名.LiveConnect)中,它似乎被限制在7U21中,这很残忍,@Cerber:)我稍后会尝试一下。我最终重新创建了完整的浏览器堆栈(不包括JSObject)在IntelliJ小程序调试配置中。这是一个非常棘手的问题,但它正在发挥作用。在解决这个问题的过程中,我现在已经在Windows机器的浏览器中完全屏蔽了Java,并且只能在OS X上的Firefox中运行小程序!我可以在那里调试(它是7u17)但是JVM在我想逐步完成我的代码的时候崩溃了:/@SpankyQuigman try javaRA来解开你的安装:我在创建这个软件的过程中不断地解开我的安装:p也有同样的问题;真的试图摆脱applet,但我们现在一直在用它和新的Win8/Java7构建它我们的机器刚刚上线,调试工作出现问题。。。