2014-12-05 92 views
0

我被分配了一个项目,在该项目中,我们尝试使用SPDY协议将内容从Jetty服务器推送到一个或多个连接的客户端。需要对当前推送策略和处理程序进行更改,因此我想更改服务器的实现并能够调试新插入的代码。我从GitHub下载了Jetty的源代码,并且可以使用mvn clean install命令在jetty-distribution/target/distribution中生成一个发行版。如何在Jetty源代码中进行调试?

要编写我自己的服务器处理程序en策略,我在NetBeans中加载了所有Maven项目,并且可以从顶级项目中构建所有项目。我定义了我自己的处理程序,并通过在项目Jetty-Start(jetty home和base)中传递正确的参数并使用正确的XML配置,我可以从Java内部以调试模式启动服务器。我可以在调试主类,但在主,Jetty是在其他JVM中执行:

// execute Jetty in another JVM 
if (args.isExec()) 
{ 
    CommandLineBuilder cmd = args.getMainArgs(baseHome,true); 
    cmd.debug(); 
    ProcessBuilder pbuilder = new ProcessBuilder(cmd.getArgs()); 
    StartLog.endStartLog(); 
    final Process process = pbuilder.start(); 
    Runtime.getRuntime().addShutdownHook(new Thread() 
    { 
     @Override 
     public void run() 
     { 
      StartLog.debug("Destroying " + process); 
      process.destroy(); 
     } 
    }); 

    copyInThread(process.getErrorStream(),System.err); 
    copyInThread(process.getInputStream(),System.out); 
    copyInThread(System.in,process.getOutputStream()); 
    process.waitFor(); 
    System.exit(0); // exit JVM when child process ends. 
    return; 
} 

当访问通过浏览器的服务器,在服务器的代码中没有断点不断触发。我真的需要能够理解从请求处理程序到推送策略的流程,所以我怎样才能完全调试服务器的实现?

回答

1

您可以添加一些参数到您的JVM:运行码头与此

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000 

比远程运行和调试该

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000 

希望这将有助于

+0

谢谢您的回复。我查看了远程调试,并且可以使用以下命令从命令窗口启动服务器:'java -Xdebug -Xrunjdwp:transport = dt_socket,address = 8585,server = y,suspend = n -jar start.jar --module = spdy'。在NetBeans内部,我可以添加调试器,在主机localhost和端口8585上监听,NetBeans确实进入调试模式。但是,仍然没有触发断点。有什么具体的东西需要在这里处理? – jvdhooft 2014-12-05 08:51:14

+0

您将地址端口从4000更改为8585,但不是码头端口。它的调试监听器的端口,你应该使用4000或smho Imho。 – Milkmaid 2014-12-05 08:55:01

+0

我设法使它工作,通过使用您的建议和使用类似的方法http://stackoverflow.com/questions/9205063/processbuilder-debugging。非常感谢! – jvdhooft 2014-12-05 12:25:35

相关问题