如何在调试Java代码时使用Scanner类对象在变量中设置值?

时间:2018-02-04 15:40:32

标签: java ubuntu debugging java-8 java.util.scanner

我在使用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。

先谢谢你的帮助。

2 个答案:

答案 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

现在,为了输入值以便扫描程序可以读取它,请返回第一个终端(运行应用程序的终端)并正常输入参数。

您设置的任何断点都会在第二个调试窗口中出现。

希望这有帮助。