问题描述
使用Java的jdb调试我的代码。我停留在我的程序期望命令行输入的位置,但是jdb将其作为jdb命令拦截。
Debugging my code with Java's jdb. Am stuck at a point where my program expects command-line input, but jdb intercepts it as a jdb command.
如何告诉jdb将文本传递给正在运行的文件程序?
How do I tell jdb to pass through text to the running program?
版本:
C:\Documents and Settings\*snip*>java -showversion
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
编译:
javac -g LZWDecompress.java
jdb.ini:
stop in LZWDecompress.decompress
run
monitor list
这就是:
Initializing jdb ...
*** Reading commands from C:\Documents and Settings\*snip*\jdb.ini
Deferring breakpoint LZWDecompress.decompress.
It will be set after the class is loaded.
> run LZWDecompress
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
> > >
VM Started: Set deferred breakpoint LZWDecompress.decompress
File to be decompressed:
在上面的提示符下,我输入test,并收到此回复:
At the prompt above, I enter "test", and receive this response:
...
VM Started: Set deferred breakpoint LZWDecompress.decompress
File to be decompressed: test
Unrecognized command: 'test'. Try help...
>
这是函数main(...)的代码,由我们的教师编写,而不是我:
Here is the code from function main(...), written by our instructor, not me:
public static void main(String[] args) throws IOException {
short [] source;
int dlen;
int sz;
byte [] decompressed;
BufferedReader br;
DataInputStream In;
FileInputStream FI;
FileOutputStream FO;
InputStreamReader isr;
String cfnm;
String sfnm;
source = new short[INPUT_FILE_IO_BUFFER_SIZE];
decompressed = new byte[OUTPUT_FILE_IO_BUFFER_SIZE];
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
System.out.print("File to be decompressed: ");
System.out.flush();
sfnm = br.readLine();
System.out.print("Name of the decompressed file: ");
System.out.flush();
cfnm = br.readLine();
FI = new FileInputStream(sfnm);
In = new DataInputStream(FI);
FO = new FileOutputStream(cfnm);
for (sz=0; true; ++sz) {
try { source[sz] = In.readShort();
} catch (EOFException e) { break;
} catch (Exception e) { System.out.print(e.toString());
}
}
dlen = decompress(source, sz, decompressed);
FO.write(decompressed, 0, dlen);
FO.close();
} // end main()
推荐答案
嗯......这个似乎表明我需要运行该程序,然后附上调试器。例如:
Hmmm...this post seems to indicate I need to run the program and then attach the debugger to it. For example:
% java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n LZWDecompress
% jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
在通过用户输入函数后,如何让程序停止,并不是很明显。
Not immediately obvious how I get the program to stop after passing by the user input functions.
这是首选方法吗?
更新:在运行程序提示用户输入后,附加并配置jdb(例如,断点)。配置jdb后,为正在运行的程序提供输入。然后jdb在第二个窗口中接管程序执行。 :D
Update: attach and configure jdb (for example, breakpoints) once the running program prompts for user input. Once jdb is configured, provide input to the running program. jdb then takes over program execution in the second window. :D
这篇关于如何将控制台输入传递给正在运行的Java程序而不是jdb?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!