Java编译后在Ubuntu上的调试方法
在调试前,需确认Ubuntu系统已安装JDK并配置好环境变量。通过以下命令安装OpenJDK(以11为例):
sudo apt update && sudo apt install openjdk-11-jdk
配置环境变量:编辑~/.bashrc文件,添加export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64和export PATH=$PATH:$JAVA_HOME/bin,然后运行source ~/.bashrc使配置生效。验证安装:javac -version(应显示编译器版本)和java -version(应显示运行时版本)。
调试需获取源代码与行号信息,编译时必须添加-g参数(生成包含调试信息的.class文件):
javac -g YourClassName.java
若未添加-g,调试工具将无法显示变量值、断点位置等关键信息。
jdb是JDK自带的命令行调试工具,适合习惯终端操作的用户。
jdb YourClassName(YourClassName为包含main方法的类名)。stop at YourClassName:20。run,程序将在断点处暂停。step:进入当前行调用的方法内部;next:执行当前行,不进入方法内部;cont:继续执行程序直到下一个断点或结束。print variableName(如print count)查看变量当前值。where查看方法调用堆栈,定位错误发生位置。IntelliJ IDEA、Eclipse等IDE提供直观的图形化调试界面,大幅提升效率。
Run→Edit Configurations,点击+→Application,设置Main class(主类名)和Use classpath of module(模块)。Variables标签页显示当前变量值;Step Over(F8)、Step Into(F7)、Step Out(Shift+F8)控制执行流程。File→Import→Existing Projects into Workspace导入Java项目。Debug As→Java Application。Step Into、Step Over、Resume等按钮控制调试流程。若Java程序运行在远程Ubuntu服务器上,可通过远程调试连接到本地IDE。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar your-app.jarsuspend=y表示程序启动后暂停,等待IDE连接;address为监听端口)。Run→Edit Configurations→+→Remote,设置Port为5005,点击OK。Run→Debug Configurations→Remote Java Application,设置Host(服务器IP)和Port(5005),点击Debug。log4j.properties或logback.xml中配置日志级别(如DEBUG),通过日志文件定位问题。jstack生成线程快照,查看线程状态(如死锁、阻塞),命令:jstack <pid>(pid为Java进程ID,可通过jps命令获取)。