我在使用jdb(Java Debugger)调试Java源代码时遇到问题。当我尝试使用scanner类对象在实例变量中设置值时,它将显示以下输出
Jdb Displaying following output
我无法理解为什么我收到此消息"无法识别的命令"。 我的java源代码如下
import java.util.Scanner;
class StringPlay{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int t;
// System.out.println("t");
t=sc.nextInt();
for(int l=0;l<t;l++){
String s="",a="";
int k=0,player=0;
// System.out.println("s");
s=sc.next();
for(int i=0;i<s.length();i++){
for(int j=i+1;j<s.length();j++){
if((int)s.charAt(j)!=(int)s.charAt(i)){
// strcat(a,s[j]);
a+=s.charAt(j);
// k++;
}
if(j==s.length()-1){
s=a;
a="";
// string::replace(a,0,"");
player++;
}
}
}
if(player%2==0)System.out.println("player1");
else System.out.println("player2");
}
}
}
我正在使用jdb版本1.8(Java SE版本1.8.0_151)。 和java版本&#34; 9.0.1&#34; Java(TM)SE运行时环境(版本9.0.1 + 11) Java HotSpot(TM)64位服务器VM(版本9.0.1 + 11,混合模式)
我正在使用Ubuntu 16.04LTS中的Java。
先谢谢你的帮助。
答案 0 :(得分:1)
尝试向Scanner提供一个输入字符串,以便使用jdb进行调试。因为您的控制台输入是由jdb读取的,而不是由Scanner类读取的。
您可以尝试:
.catch()
或者你可以直接喂它:
String myInput = "This is my input, that I want in my sc.";
Scanner sc = new Scanner(myInput);
答案 1 :(得分:0)
从this post获取此信息:
您需要拆分应用程序的运行,并在两个不同的终端进行调试。
第一个终端需要只运行应用程序,但要以jdb
以后可以连接的方式运行它。您可以使用以下命令执行此操作:java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n MyClass
在第二个调试窗口中,您需要运行以下命令连接到Java应用程序:jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
现在,为了输入值以便扫描程序可以读取它,请返回第一个终端(运行应用程序的终端)并正常输入参数。
您设置的任何断点都会在第二个调试窗口中出现。
希望这有帮助。