2012-02-09 67 views
2

我創建了一個可執行的jar並使用另一個java程序的進程生成器執行它。這裏是我的代碼 -ProcessBuilder調試

public class SomeClass { 
public static void main(String[] args) { 
    Process p = null; 
    ProcessBuilder pb = new ProcessBuilder("java", "-jar", "src.jar"); 
    pb.directory(new File("/Users/vivek/servers/azkaban-0.10/TestApp/src")); 
    try { 
     p = pb.start(); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

}

我想現在調試Eclipse中的src.jar。我在我的調試配置中提供了項目src作爲外部項目,但它仍然沒有達到我的任何中斷點。有沒有辦法爲這樣的事情建立一個調試環境?

+0

因此,讓我看看我是否正確理解您 - 您在Eclipse中調用了上面的SomeClass代碼,並且想要在由Eclipse提供的單獨JVM調用Eclipse之外的jar文件中調試Java源代碼?我看不到這樣的結局。我在考慮將日誌代碼添加到src所持有的Java代碼中可能會很好。 – 2012-02-09 03:49:13

+0

我很抱歉這麼晚回覆!我設法解決了這個問題。當我創建一個新的ProcessBuilder時,我只需將Xdebug選項添加到該命令並指定一個要連接的端口。然後在eclipse中創建一個調試配置並連接到該端口進行調試。 – 2012-03-25 05:43:07

回答

4

好吧,所以我設法讓這個工作。不幸的是,我找不到我用於此的示例項目,所以我會盡力解釋我所能做到的。 從上面考慮這條線 -

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "src.jar"); 

所有我需要做的是添加的Xdebug作爲參數傳遞給這個 -

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005", "src.jar"); 

然後創建在eclipse調試環境,將端口設置爲5005在jar的源代碼中設置幾個斷點,並且它工作正常!

+0

如果有人試圖在Eclipse中進行設置,我可以使用以下[示例](http://www.ibm.com/developerworks/opensource/library/os-eclipse-javadebug/)。 – Felix 2013-04-16 23:05:18

0

調試jar包的Eclipse中的方法:

  1. 在項目引用的庫選擇罐子。
  2. 在java源代碼附件中,您可以指定源代碼的位置。
  3. 從您的項目中調用一些類的jar文件。
  4. 添加斷點並調試您的項目。

在這種情況下,jar文件和您的項目在同一個進程中運行。

但是,當您通過 ProcessBuilder運行jar文件時,jar文件在另一個獨立於您的項目的進程中運行,當然獨立於eclipse,即jar文件正在運行您輸入'java -jar jarfile'在命令行中。

+0

你最近的筆記與我之前提出的評論相符。再次,我認爲他最好的選擇是忘記嘗試這種方式進行調試,而是通過日誌記錄獲取程序狀態。 – 2012-02-09 03:53:45