问一个jdb调试的问题

the_venus 2011-09-12 10:25:12
我用jdb调试一个java控制台应用程序,出现了以下问题:

Scanner sc=New Scanner(System.in);

int i=sc.nextInt();

System.out.println(i);

当我用step命令单步到int i=sc.nextInt()的时候,怎么样让被调试的程序从控制台接受一个输入呀?
我不知道是用的哪个jdb命令,请各位高手指教。。。谢谢了。。。
...全文
373 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
troore 2012-02-13
  • 打赏
  • 举报
回复
十楼高手!
the_venus 2011-09-15
  • 打赏
  • 举报
回复
十楼好厉害呀!我要把60分都给你。。。。
qybao 2011-09-14
  • 打赏
  • 举报
回复
很少有人用jdb调试了。
看LZ这么有好学之心,我就告诉你怎么做吧

方法1,远程调试(因为控制台会被jdb占有,需要用另一个控制台来提供输入)
假设程序如下
import java.util.*;
class csdn {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input a data:");
String data = sc.nextLine();
System.out.printf("the data you input is %s\n", data);
}
}

在控制台编译(控制台1)
javac -g csdn.java

用服务的方式启动程序
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y csdn

打开另一个控制台,远程调试(控制台2)
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

此时进入jdb环境,自己设置断点单步或连续执行(命令例子)
stop at csdn:4
run
step
step (此时会发现控制台1输出 please input a data:)
step (此时可以在控制台1输入数据 这里假设输入 abcd)
step (此时发现控制台1输出 the data you input is abcd)
step (此时会提示程序结束)

方法2,使用外部文件,这个需要在程序上做控制,所以要修改一下代码
import java.util.*;
class csdn {
public static void main(String args) {
if (System.getProperty("_DEBUG") != null) { //通过判断系统属性来修改输入重定向
System.setIn(new FileInputStream("data.txt")); //事先准备好输入数据的文件
}
Scanner sc = new Scanner(System.in);
System.out.println("please input a data:");
String data = sc.nextLine();
System.out.printf("the data you input is %s\n", data);
}
}


控制台编译
javac -g csdn.java

控制台调试(调试的时候设置系统属性,这里要注意属性的名字要和程序里的属性名字一样)
jdb -D_DEBUG=y csdn

此时进入jdb环境,接下来都一样了
24K純帥 2011-09-14
  • 打赏
  • 举报
回复
囧,这么小的程序也要调试啊
the_venus 2011-09-14
  • 打赏
  • 举报
回复
不好意思,上面有个错误,当我们输入20,控制台回显的是结果是"20"无法识别的命令。。。
the_venus 2011-09-14
  • 打赏
  • 举报
回复
对呀,但是现在的问题是:当程序调试运行到
int i=sc.nextInt();
这句话的时候,我们的输入却被jdb解释为jdb命令了呀,比如我们现在想在控制台上面输入20,当我们输入20再敲回车,回显的结果是'10'无法识别的命令,而不是jdb把我们输入的10传递给sc了。。。。
我们现在要解决的问题是:当我们从控制台输入10的时候,单步跟踪能得到i=10....我就是不知道这个地方用什么命令。。。。。如何输入呀。。。。有哪位高手能帮我解决一下。。。谢谢了。。。头疼了好多天了。。。
the_venus 2011-09-13
  • 打赏
  • 举报
回复
我知道,在jdb调试模式下面所有的输入会当成jdb命令执行了呀,应用程序没有办法接收输入呀。。。
baillluu 2011-09-13
  • 打赏
  • 举报
回复
...
这段代码没看错的话,就是一个接收控制台的输入吧。。
liuyuhua0066 2011-09-12
  • 打赏
  • 举报
回复
Scanner 接受控制台输入
安心逍遥 2011-09-12
  • 打赏
  • 举报
回复
控制台输入
完美灬缺陷 2011-09-12
  • 打赏
  • 举报
回复
自己在控制台手动输入一个就行了。。。
gentleboy2009 2011-09-12
  • 打赏
  • 举报
回复
自己在控制台输入一个就行了

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧