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);
 }
}
时间:原作者:0个回答

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

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

原作者:
...