Ubuntu Java应用调试方法
在调试前,需确保Ubuntu系统已安装JDK(Java Development Kit)并配置好环境变量。通过以下命令安装默认JDK:
sudo apt update
sudo apt install default-jdk
配置环境变量(编辑~/.bashrc或/etc/environment文件,添加以下内容,替换java-version-here为实际版本,如java-17-openjdk-amd64):
export JAVA_HOME=/usr/lib/jvm/java-version-here
export PATH=$JAVA_HOME/bin:$PATH
保存后执行source ~/.bashrc使配置生效。
jdb是JDK自带的命令行调试工具,适合习惯终端操作的开发者。
使用-g选项编译Java文件,生成包含变量名、行号等调试信息的.class文件:
javac -g YourJavaFile.java
通过jps命令查看Java进程ID(PID),再用jdb附加到目标进程:
jps # 获取目标Java程序的PID
jdb -attach <PID>
或直接启动程序并进入调试模式:
jdb YourJavaFile
stop at YourJavaFile:10
run
step:进入当前行调用的方法内部;next:执行当前行,不进入方法内部;sum):print sum
cont
where
更多命令可通过help命令查看。
IDE(如IntelliJ IDEA、Eclipse)提供图形化界面,大幅简化调试流程。以下以IntelliJ IDEA为例说明:
Create New Project或Open导入现有Java项目;int sum = add(a, b);行)。main方法的Java文件,选择Debug '类名.main()';Step Into(F7):进入方法内部;Step Over(F8):执行当前行,不进入方法;Step Out(Shift+F8):跳出当前方法;Variables标签页显示当前作用域内的变量值,可右键选择Evaluate Expression计算表达式;Variables面板双击变量值,可直接修改并查看效果;Frames标签页显示调用栈,点击帧可跳转到对应代码位置。若Java应用运行在远程服务器(如Ubuntu服务器),可通过远程调试连接排查问题。
在启动命令中添加以下JVM参数(以端口5005为例):
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar YourApp.jar
server=y:表示作为调试服务器;suspend=y:程序启动后暂停,等待调试器连接;address=*:5005:监听所有网络接口的5005端口。以IntelliJ IDEA为例:
Run -> Edit Configurations;+号,选择Remote JVM Debug;Remote Debug),修改Port为远程端口(如5005);OK保存配置;System.out.println或日志框架Log4j),记录关键变量值和程序流程,帮助定位问题;jstack命令生成线程快照(如jstack <PID>),查看线程状态(如BLOCKED、RUNNABLE),排查线程阻塞问题。