gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:14 25 4
gpt4 key购买 nike

我正在使用 Eclipse 开发一个 Java 程序,我想我应该在我的程序中添加一个选项来在没有参数的情况下解析标准输入。 (否则它解析一个文件)

如果我执行 "somecommand | java -jar myjar.jar" 并去调试,我会遇到问题......然后意识到我不知道如何在 Eclipse 中启动一个进程.如果我在命令提示符下运行它,我无法附加到正在运行的进程,因为该进程会立即启动。

关于如何调试有什么建议吗?

编辑:看,问题是,我最初编写我的程序是为了采用文件名参数。然后我认为它也采用 stdin 会很有用,所以我确实从我的程序中抽象了 InputStream(正如 Queue 先生所建议的)。它在文件 (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);
}
}

最佳答案

在命令行上使用管道运行您的应用程序,但添加 JVM args 以进行远程调试,如下所示:

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

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

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

关于Java+Eclipse : how do you debug a java program that is receiving piped/redirected stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1580758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com