iok*_*ins 10 java debugging jdb
使用Java的jdb调试我的代码.我停留在我的程序期望命令行输入的位置,但是jdb将其作为jdb命令拦截.
如何告诉jdb将文本传递给正在运行的程序?
版:
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)
Run Code Online (Sandbox Code Playgroud)
编译:
javac -g LZWDecompress.java
Run Code Online (Sandbox Code Playgroud)
jdb.ini:
stop in LZWDecompress.decompress
run
monitor list
Run Code Online (Sandbox Code Playgroud)
这是发生的事情:
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:
Run Code Online (Sandbox Code Playgroud)
在上面的提示符下,我输入"test",并收到此回复:
...
VM Started: Set deferred breakpoint LZWDecompress.decompress
File to be decompressed: test
Unrecognized command: 'test'. Try help...
>
Run Code Online (Sandbox Code Playgroud)
这是函数main(...)的代码,由我们的教师编写,而不是我:
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()
Run Code Online (Sandbox Code Playgroud)
嗯...这篇文章似乎表明我需要运行该程序,然后将调试器附加到它.例如:
% java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n LZWDecompress
% jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
Run Code Online (Sandbox Code Playgroud)
我没有立即明白如何在通过用户输入函数后让程序停止.
这是首选方法吗?
更新:一旦正在运行的程序提示用户输入,请附加并配置jdb(例如,断点).配置jdb后,为正在运行的程序提供输入.然后jdb在第二个窗口中接管程序执行.:d
归档时间: |
|
查看次数: |
5313 次 |
最近记录: |