我遇到了JVM及其調試功能的更深層次問題。 我所試圖做的是使用的ProcessBuilder啓動單獨的Java程序,讓它與我的主要進程進行通信。 「:JDWP = =運輸dt_socket,服務器= Y,暫停= Y,地址= 1044 -agentlib」,Java ProcessBuilder調試器Netbeans
到的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的從一個進程傳遞序列化的數據給對方,但因爲我不能調試子進程,我不知道這是否是問題的一個潛在來源。
我使用的Mac系統。
由於這個問題的解決方案超出了我對Java魔法的知識,請幫助我解決這個謎題。
感謝,
中號