Java+Eclipse: how do you debug a java program that

2019-08-19 11:15发布

我使用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);
    }
}

Answer 1:

运行你的应用程序,与管道,在命令行上,但增加JVM args作为远程调试,就像这样:

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

suspend=y会告诉JVM不实际运行程序,直到调试器附加。

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



Answer 2:

如果我解释你的问题吧,我相信你只是想知道如何通过它在Eclipse中输入发送跨标准和调试。

如果是简单的输入,你其实可以通过手动Eclipse控制台窗口中输入,而在程序运行System.in数据。 刚开始在控制台窗口中键入,然后按回车键的文本发送到标准英寸

如果是更复杂的东西,我建议你抽象正在试图做取一个InputStream读。 在你的程序,你可以发送System.in作为InputStream的。 为了调试,您可以发送任何其他的InputStream。 例如,你可以把你输入一个文件中,并通过一个FileInputStream的方法来测试它。

编辑:没有看到更多的代码,我不知道,但你可能将要发生什么用EOF检测。 一个FileInputStream有一个定义的文件的末尾,但我猜System.in有这样的事。 你的读者可能只是等待读取下一个字符,永不推进。 您可能需要手动停止读取你知道你读过“够了”之后。



Answer 3:

也许这个解决方案创建一个命名管道的可能适用于这里。

mkfifo foo
somecommand > foo

在调试配置接下来,添加< foo在指定参数时,让你的程序调试为:

Java的罐子myjar.jar <FOO



Answer 4:

我迟到了。 但是你可以看看在为您的项目调试配置“常用”选项卡。 在那里,你应该能够看到标有“标准输入和输出”一节。 您可以输入文件,并设置输出文件这样分配的控制台。



文章来源: Java+Eclipse: how do you debug a java program that is receiving piped/redirected stdin?