【问题标题】:How can i set value in variable using Scanner class object while debugging Java code?如何在调试 Java 代码时使用 Scanner 类对象设置变量中的值?
【发布时间】:2018-02-04 15:40:31
【问题描述】:

我在使用 jdb(Java Debugger) 调试我的 Java 源代码时遇到问题。当我尝试使用扫描器类对象在实例变量中设置值时,它将显示以下输出

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版本“9.0.1” Java(TM) SE 运行时环境 (build 9.0.1+11) Java HotSpot(TM) 64 位服务器 VM(内部版本 9.0.1+11,混合模式)

我正在 Ubuntu 16.04LTS 中使用 Java。

提前感谢您帮助我。

【问题讨论】:

  • 感谢您尝试以男性的方式进行操作,但是,您是否考虑过使用 Eclipse、Netbeans 或 IntelliJ 之类的 IDE 而不是命令行jdb?生产力方面的胜利,尤其是在大量调试时……
  • 嘿,谢谢@Holger 好吧,我不会在 Eclipse 或其他 IDE 上尝试

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


【解决方案1】:

尝试为扫描器提供输入字符串以使用 jdb 进行调试。因为您的控制台输入是由 jdb 而不是由 Scanner 类读取的。

你可以试试:

String myInput = "This is my input, that I want in my sc.";
Scanner sc = new Scanner(myInput);

或者你可以直接喂它:

Scanner sc = new Scanner("This is my input, that I want in my sc.");

【讨论】:

  • 哦..我想输入表单用户不是来自系统。
  • 是的,就像我说的,使用 jdb 进行调试应该使用它,而在没有 jdb 的情况下运行程序使用 System.in。
  • 好的,但是在调试程序时我们不能接受输入吗??
  • 好吧,伙计,它仍然不起作用。现在它将显示“Nothing Suspended”错误。
【解决方案2】:

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

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

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2020-02-05
    • 2013-07-10
    • 1970-01-01
    • 2010-11-07
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多