如何在Jetty源代码中调试?

时间:2014-12-05 08:23:05

标签: java maven debugging jetty

我被分配了一个项目,我们尝试使用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;
}

通过浏览器访问服务器时,不会触发服务器代码中的断点。我真的需要能够理解从请求处理程序到推送策略的流程,那么如何完全调试服务器的实现呢?

1 个答案:

答案 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

希望它会有所帮助