我使用Eclipse来开发一个Java程序,并推断我想补充一个选项,我的计划,如果没有参数解析标准输入。 (否则它解析的文件)
我有问题,如果我执行"somecommand | java -jar myjar.jar"
去调试......这时才意识到,我不知道如何在Eclipse中启动一个进程这样。 如果我在命令提示符下运行它,我不能因为过程会立即开始安装到正在运行的进程。
关于如何调试有什么建议?
编辑 :看到的事情是,我写我的节目最初采取的文件名参数。 然后,我想这将是有益的它采取标准输入一样,所以我做了抽象的InputStream我的节目(如队列先生建议)。 它的工作原理上的一个文件(微操作java -jar myjar.jar myfile
),但是当我运行不操作type myfile | java -jar myjar.jar
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);
}
}
运行你的应用程序,与管道,在命令行上,但增加JVM args作为远程调试,就像这样:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044
suspend=y
会告诉JVM不实际运行程序,直到调试器附加。
接下来,进入Eclipse调试启动配置( Run -> Debug Configurations...
),并创造了“远程Java应用程序”连接到你的应用程序。 在Eclipse中运行启动(设置一些断点后),你应该能够调试。 不是非常方便,但如果你不能没有管重现你的问题,这是一个选项。
如果我解释你的问题吧,我相信你只是想知道如何通过它在Eclipse中输入发送跨标准和调试。
如果是简单的输入,你其实可以通过手动Eclipse控制台窗口中输入,而在程序运行System.in数据。 刚开始在控制台窗口中键入,然后按回车键的文本发送到标准英寸
如果是更复杂的东西,我建议你抽象正在试图做取一个InputStream读。 在你的程序,你可以发送System.in作为InputStream的。 为了调试,您可以发送任何其他的InputStream。 例如,你可以把你输入一个文件中,并通过一个FileInputStream的方法来测试它。
编辑:没有看到更多的代码,我不知道,但你可能将要发生什么用EOF检测。 一个FileInputStream有一个定义的文件的末尾,但我猜System.in有这样的事。 你的读者可能只是等待读取下一个字符,永不推进。 您可能需要手动停止读取你知道你读过“够了”之后。
也许这个解决方案创建一个命名管道的可能适用于这里。
mkfifo foo
somecommand > foo
在调试配置接下来,添加< foo
在指定参数时,让你的程序调试为:
Java的罐子myjar.jar <FOO
我迟到了。 但是你可以看看在为您的项目调试配置“常用”选项卡。 在那里,你应该能够看到标有“标准输入和输出”一节。 您可以输入文件,并设置输出文件这样分配的控制台。
文章来源: Java+Eclipse: how do you debug a java program that is receiving piped/redirected stdin?