java - Java+Eclipse: 如何调试接收管道/重定向标准的java程序?

  显示原文与译文双语对照的内容
100 2

我使用 Eclipse 开发一个Java程序,并且我想如果没有参数,我会为程序添加一个选项。 ( 否则它将解析文件)

我在执行任务时遇到问题 "somecommand | java -jar myjar.jar" 然后进入调试。"。"。然后意识到我不知道如何在 Eclipse 中启动一个进程。 如果在命令提示符上运行它,自从进程立即启动以来,不能附加到正在运行的进程。

关于如何调试的任何建议?

要注意,我编写的程序最初是以文件名参数为参数。 我认为它对它同样有用,所以我在我的程序中做了抽象的InputStream ( 如图2 所示) 。 队列建议在文件上操作很精细( java -jar myjar.jar myfile ),但运行时不运行 type myfile | java -jar myjar.jar 我怀疑两个场景中有不同的( 。eof 检测不同),但我真的希望调试。


//overall program structure follows:



public static void doit(InputStream is)


{


. . .


}



public static void main(String[] args)


{


 if (args.length> 0)


 {


//this leaves out the try-catch-finally block,


//but you get the idea. 


 FileInputStream fis = new FileInputStream(args[0]);


 doit(fis);


 fis.close();


 }


 else


 {


 doit(System.in);


 }


}



时间: 原作者:

60 5

在 命令行 上运行你的应用程序,但要添加用于远程调试的JVM参数,如下所示:


-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044



suspend=y 将告诉JVM在连接调试器之前不实际运行程序。

接下来,进入 Eclipse 调试启动配置( Run -> Debug Configurations... ) 创建一个"远程Java应用程序",连接到你的应用程序。 在 Eclipse ( 设置了一些断点之后) 中运行启动程序,你应该能够调试。 不是很方便,但如果不能在没有管道的情况下重现问题,这是一个选项。

原作者:
52 1

如果我正在解释你的问题,我相信你只需要知道如何在 Eclipse 中通过标准发送输入。

如果是简单输入,则可以在程序运行时通过 Eclipse 控制台窗口手动输入 System.in 数据。 在控制台窗口中键入,然后按enter键将文本发送到。

如果这是一个更复杂的问题,我建议抽象读取你想要做的一个转换。 在程序中,你可以将 System.in 作为InputStream发送。 若要调试,可以发送任何其他 InputStream 。 例如可以将输入放入文件中,并将FileInputStream传递给该方法以测试它。

编辑:没有看到更多的代码,但是我不确定,但是你可以能在 eof 检测中找到了一些。 FileInputStream有一个已经定义的文件结尾,但我猜 System.in 没有任何。 你的读者可能只是在等待读下一个字符,而。 你可能必须手动停止阅读,因为你知道已经阅读了"足够了"。

107 4

也许这个解决方案创建一个命名管道可以在这里应用。


mkfifo foo


somecommand> foo



接下来在调试配置中,在args中添加 <foo,以便将程序调试为:

java jar myjar.jar <foo

原作者:
146 1

我迟到了。 但是你可以在项目的调试配置中查找"公用"选项卡。 在那里,你应该能够看到一个标记为"标准输入和输出"的节。 你可以使用输入文件分配控制台,并以这种方式设置输出文件。

...