我被分配了一個項目,在該項目中,我們嘗試使用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