2012-02-09 24 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