Java ProcessBuilder 调试器 Netbeans

标签 java debugging netbeans classnotfoundexception processbuilder

我在 JVM 的更深层次及其调试功能方面遇到了麻烦。 我想做的是使用 ProcessBuilder 启动一个单独的 java 程序,并让它与我的主进程进行通信。除非我添加命令,否则一切正常

“-agentlib:jdwp=transport=dt_socket,服务器=y,挂起=y,地址=1044”,

到 ProcessBuilder。

Class toExecute = ExampleSimulationController.class;
String javaHome = System.getProperty("java.home");
String javaBin = javaHome
        + File.separator + "bin"
        + File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = toExecute.getCanonicalName();

ProcessBuilder builder = new ProcessBuilder(javaBin, "-cp",
        "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044",
         classpath, className);
builder.redirectErrorStream(true);

将此行添加到 ProcessBuilder(旨在将调试功能添加到子流程中,例如,此处: What are Java command line options to set to allow JVM to be remotely debugged? 当我尝试阅读以下内容时出现异常:

BufferedReader mainProcessConsoleOutput = new BufferedReader(new InputStreamReader(mainSimulation.getInputStream()));

再往下:

if(!(line = mainProcessConsoleOutput.readLine()).equals("someText"))

异常情况如下:

Main Process: Exception in thread "main" java.lang.NoClassDefFoundError: /Users/...[path].../build/classes
Main Process: Caused by: java.lang.ClassNotFoundException: .Users.[same_Path].build.classes
Main Process:   at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
Main Process:   at java.security.AccessController.doPrivileged(Native Method)
Main Process:   at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
Main Process:   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main" java.lang.NullPointerException
at [PacketStructure].SimulationController.main(SimulationController.java:66)

我使用 Netbeans 作为 IDE,并且了解“附加调试器”并为其提供与传递给 ProcessBuilder 的命令中指定的端口相同的端口。但是,我不知道何时必须执行此操作 - 在子进程中指定断点之前?然后?到目前为止,我没有发现任何迹象表明我的子进程正在以任何方式与调试器通信。

对我来说似乎也可疑的是,当我尝试从子进程的流中读取时,而不是更早的某个地方,抛出了异常。

我确实使用 ObjectInputStream 和 ObjectOutputStream 将序列化数据从一个进程传递到另一个进程,但由于我无法调试子进程,所以我不知道这是否是问题的潜在根源。

我使用 MacO。

由于这个问题的解决超出了我对 Java Magic 的了解,请帮助我解决这个谜语。

谢谢

中号

最佳答案

类路径值必须紧跟在类路径参数之后。

关于Java ProcessBuilder 调试器 Netbeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852943/

相关文章:

java - Gradle + Eclipse:在新项目中使用现有项目中的类

java - 如何避免使用 PreparedStatement.setNull?

java - @DateTimeFormat 转换为 JSON 格式错误

JAVA 绘制线与组件

debugging - 所提交的网址带有不被接受的字符

c# - 为什么我不能在调试器中编辑包含匿名方法的方法?

mysql - 在 Netbeans 中创建自动生成的 ID 时,值始终设置为 0 而不是 1

debugging - 对于在 Docker 容器内创建的 Php 项目,Xdebug 会忽略 Netbeans 中的断点

Netbeans 说新创建的文件已存在,文件为空

java - 使用 Spring Mvc 4 的 NetBeans glasfish4 中的 MojoException