2014-12-05 90 views
0

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

當訪問通過瀏覽器的服務器,在服務器的代碼中沒有斷點不斷觸發。我真的需要能夠理解從請求處理程序到推送策略的流程,所以我怎樣才能完全調試服務器的實現?

回答

1

您可以添加一些參數到您的JVM:運行碼頭與此

-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 

希望這將有助於

+0

謝謝您的回覆。我查看了遠程調試,並且可以使用以下命令從命令窗口啓動服務器:'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

+0

您將地址端口從4000更改爲8585,但不是碼頭端口。它的調試監聽器的端口,你應該使用4000或smho Imho。 – Milkmaid 2014-12-05 08:55:01

+0

我設法使它工作,通過使用您的建議和使用類似的方法http://stackoverflow.com/questions/9205063/processbuilder-debugging。非常感謝! – jvdhooft 2014-12-05 12:25:35

相關問題