You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调试:用Scanner类赋值变量及jdb‘未识别命令’报错求助

刚好之前也遇到过类似的jdb调试问题,我来给你捋清楚怎么解决:

为什么会提示“unrecognized command”?

你大概率是直接在jdb里输入了Java代码(比如scanner.nextInt()),但jdb有自己专属的调试命令集合,它根本不认识原生的Java语句,只认print、eval、set这类调试指令。这是新手用jdb最容易踩的坑——别把jdb当成Java交互式控制台用,得用它提供的命令来执行Java表达式。

如何在jdb中用Scanner为变量赋值?

我拿一个示例代码来一步步演示,假设你的代码结构是这样的:

import java.util.Scanner;

public class DebugTest {
    private int num;

    public static void main(String[] args) {
        DebugTest test = new DebugTest();
        Scanner scanner = new Scanner(System.in);
        // 这行设为断点,方便调试时操作
        test.num = scanner.nextInt();
        System.out.println("Num is: " + test.num);
        scanner.close();
    }
}

步骤1:编译代码时保留调试信息

编译必须加-g参数,不然jdb没法识别变量和行号:

javac -g DebugTest.java

步骤2:启动jdb并设置断点

# 启动jdb调试目标类
jdb DebugTest
# 在给num赋值的行设置断点(假设行号是9)
stop at DebugTest:9
# 运行程序
run

程序会停在断点处,此时Scanner对象已经被实例化完成,可以操作了。

步骤3:用eval命令执行Scanner赋值

jdb的eval命令是用来执行Java表达式的,这才是正确的操作方式:

  • 直接通过Scanner读取输入赋值给实例变量:
    eval test.num = scanner.nextInt()
    
    输入这条命令后,jdb会等待你在控制台输入一个整数,输完回车,变量就赋值成功了。
  • 也可以先存到临时变量再赋值(适合复杂场景):
    eval int temp = scanner.nextInt()
    eval test.num = temp
    

步骤4:验证赋值结果

用print命令查看变量值,确认赋值成功:

print test.num
额外注意事项
  • 必须等Scanner对象被实例化后再执行eval命令,不然jdb会报“找不到变量scanner”的错误。
  • 你的环境里jdb是1.8,但Java运行时是9,可能存在小版本兼容性问题,如果遇到奇怪的报错,建议换成和Java运行时同版本的jdb(也就是9版本的jdb)来调试,避免版本不匹配导致的问题。

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:33:42