【问题标题】:ProcessBuilder debuggingProcessBuilder 调试
【发布时间】:2012-02-09 03:37:05
【问题描述】:

我创建了一个可执行 jar 并使用来自另一个 java 程序的进程构建器执行它。这是我的代码 -

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 作为外部项目,但它仍然没有遇到我的任何断点。有没有办法为这样的东西设置调试环境?

【问题讨论】:

  • 所以让我看看我是否理解正确 - 您正在从 Eclipse 中调用上面的 SomeClass 代码,并希望在一个 jar 文件中调试 Java 源代码,该文件在单独的 JVM 中在 Eclipse 之外调用由操作系统提供?我不认为这个结局适合你。我认为您最好将日志记录代码添加到 src 持有的 Java 代码中。
  • 很抱歉这么晚才回复!我设法解决了这个问题。当我创建一个新的 ProcessBuilder 时,我只需将 Xdebug 选项添加到命令中并指定一个要连接的端口。然后只需在 eclipse 中创建一个调试配置并连接到该端口进行调试。

标签: java process runtime.exec processbuilder


【解决方案1】:

好的,所以我设法让它工作。不幸的是,我找不到我用于此的示例项目,所以我会尽力解释。 从上面考虑这一行 -

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的源代码中设置了几个断点,就成功了!

【讨论】:

  • 如果有人尝试在 Eclipse 中进行设置,我发现以下 example 很有用。
【解决方案2】:

Eclipse中调试jar包的方法:

  1. 在项目的Referenced Lib中选择jar。
  2. 在java源码附件中可以指定源码的位置。
  3. 从您的项目中调用一些 jar 文件类。
  4. 添加断点并调试您的项目。

在这种情况下,jar 文件和您的项目在同一个进程中运行。

但是当你运行 jar 文件时 ProcessBuilder,jar文件运行在另一个独立于你的项目的进程中,当然也独立于eclipse,即jar文件运行方式是你在命令行输入'java -jar jarfile'的方式。

【讨论】:

  • 您的最后一条注释与我之前的评论相符。同样,我认为他最好的选择是忘记尝试以这种方式进行调试,而是通过日志记录获取程序状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多