我被分配了一个项目,我们尝试使用SPDY协议将内容从Jetty服务器推送到一个或多个连接的客户端。需要更改当前的推送策略和处理程序,因此我想更改服务器的实现并能够调试新插入的代码。我从GitHub下载了Jetty的源代码,可以使用mvn clean install
命令在jetty-distribution / target / distribution中生成分发。
为了编写我自己的服务器处理程序和策略,我在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;
}
通过浏览器访问服务器时,不会触发服务器代码中的断点。我真的需要能够理解从请求处理程序到推送策略的流程,那么如何完全调试服务器的实现呢?
答案 0 :(得分:1)
您可以在JVM中添加一些参数:使用此
运行jetty-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
希望它会有所帮助