gpt4 book ai didi

java - 如何在Jetty源代码中调试?

转载 作者:行者123 更新时间:2023-12-01 12:10:25 29 4
gpt4 key购买 nike

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

为了编写我自己的服务器处理程序和策略,我在 NetBeans 中加载了所有 Maven 项目,并且所有内容都可以从顶部项目向下构建。我定义了自己的处理程序,通过在项目 Jetty-Start(jetty home 和 base)中传递正确的参数并使用正确的 XML 配置,我可以在 Java 中以 Debug模式启动服务器。我可以调试主类,但在主类中,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;
}

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

最佳答案

您可以在 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

希望对你有帮助

关于java - 如何在Jetty源代码中调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27311620/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com