我正在使用Eclipse开发Java程序,并且想在没有参数的情况下为我的程序添加一个选项以解析stdin。(否则它将解析一个文件)
如果执行"somecommand | java -jar myjar.jar"并去调试,我会遇到问题…然后意识到我不知道如何像这样在Eclipse中启动进程。而且,如果我在命令提示符下运行它,则该进程会立即启动,因此无法附加到正在运行的进程。
"somecommand | java -jar myjar.jar"
关于如何调试的任何建议?
编辑 :看到的是,我最初编写程序是为了接受文件名参数。然后我认为也可以使用stdin也是有用的,所以我 确实 从程序中抽象了InputStream(正如Queue先生建议的那样)。在文件(java -jar myjar.jar myfile)上运行正常,但在运行时无法运行type myfile | java -jar myjar.jar。我怀疑在两种情况下(eof检测是否不同?)有些不同,但是我真的很想调试。
java -jar myjar.jar myfile
type myfile | java -jar myjar.jar
// 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在连接调试器之前不要实际运行程序。
suspend=y
接下来,进入Eclipse调试启动配置(Run -> Debug Configurations...),并创建一个“远程Java应用程序”以连接到您的应用程序。在Eclipse中运行启动(在设置一些断点之后),您应该能够进行调试。这不是很方便,但是如果您没有管道就无法重现问题,则可以选择。
Run -> Debug Configurations...