有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Windows 8上调试Java 7调试不工作

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

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

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

当我尝试连接时,在本地和远程计算机上都出现“无法打开到主机的连接,端口5005”错误

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

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

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

谢谢


共 (3) 个答案

  1. # 1 楼答案

    我设置了环境变量JAVA_TOOL_OPTIONS=“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8989”,正如它在bug中所建议的那样,它为我做了这件事(至少在Chrome中是这样)

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

  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

    真的。。。差不多了

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

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

    • 备份您的原始java。并用这个伪java替换它
    • 不要忘记更新exeFile以指向您的java目录
    • 别忘了更新stdoutRedirectstderrRedirect
    • 对mingW使用编译选项-static-libgcc -static-libstdc++

    假爪哇。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;
    }