我被分配了一个项目,在该项目中,我们尝试使用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;
}
当访问通过浏览器的服务器,在服务器的代码中没有断点不断触发。我真的需要能够理解从请求处理程序到推送策略的流程,所以我怎样才能完全调试服务器的实现?
谢谢您的回复。我查看了远程调试,并且可以使用以下命令从命令窗口启动服务器:'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
您将地址端口从4000更改为8585,但不是码头端口。它的调试监听器的端口,你应该使用4000或smho Imho。 – Milkmaid 2014-12-05 08:55:01
我设法使它工作,通过使用您的建议和使用类似的方法http://stackoverflow.com/questions/9205063/processbuilder-debugging。非常感谢! – jvdhooft 2014-12-05 12:25:35