调试Java程序需要JDK(包含javac编译器和jdb调试器),而非仅JRE。在Debian上,推荐安装OpenJDK(开源实现):
sudo apt update
sudo apt install openjdk-11-jdk # 可选其他版本(如openjdk-17-jdk)
验证安装是否成功:
java -version # 查看Java运行时版本
javac -version # 查看Java编译器版本
若输出类似javac 11.0.xx,则说明安装成功。
使用javac编译Java源文件时,必须添加-g选项,以包含调试符号(如行号、局部变量信息),否则调试器无法显示源代码或变量详情。
javac -g HelloWorld.java # 编译带调试信息的类
编译成功后,会生成HelloWorld.class字节码文件。
JDB是JDK自带的命令行调试工具,适合简单调试任务。启动JDB并加载编译后的类:
jdb HelloWorld # 加载HelloWorld类
常用调试命令:
stop in HelloWorld.main # 在HelloWorld类的main方法入口设置断点
stop at HelloWorld:5 # 在HelloWorld.java的第5行设置断点
run # 启动程序(无参数)
run arg1 arg2 # 启动程序并传递参数(如main方法需要参数时)
next(或n):执行下一行代码(不进入方法内部)。step(或s):执行下一行代码(进入方法内部,查看方法调用细节)。print 变量名(或p 变量名):查看变量的当前值(如print sum)。locals:查看当前栈帧的所有局部变量。where:查看当前调用栈(定位程序执行位置)。continue(或c):继续执行程序,直到下一个断点或程序结束。quit # 退出JDB
更多命令可通过help查看。
若需要调试运行在远程服务器或Docker容器中的Java程序,需通过**JDWP(Java调试线协议)**启用远程调试。
步骤1:启动Java程序并开启调试端口
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -cp . HelloWorld
transport=dt_socket:使用Socket通信。server=y:当前JVM作为调试服务器。suspend=n:程序启动后立即运行(不暂停,等待调试器连接);若设为y,程序会暂停,直到调试器连接。address=5005:调试端口(可自定义,如8000)。步骤2:使用JDB连接远程调试
jdb -attach localhost:5005 # 连接到本机的5005端口
步骤3:使用JDB命令调试(同本地调试,如stop in HelloWorld.main、run等)。
注意:若通过IDE(如IntelliJ IDEA、Eclipse)调试,需在IDE中配置远程调试配置(填写主机、端口),无需手动执行jdb -attach。
-g选项生成的调试信息越多,编译后的类文件体积越大,但调试体验更佳(如显示变量值、源代码行)。通过以上步骤,即可在Debian系统上使用Java编译器(javac)配合调试工具(jdb)完成Java程序的调试。