在Ubuntu环境下做Ja va调试,方法其实不少,从命令行到IDE,再到远程连接,各有各的适用场景。下面把这些技巧从头到尾梳理一遍,环境配置、基础调试、进阶玩法,一次讲清楚。

一、基础环境准备
调试之前,先把环境搭好。Ubuntu上安装JDK很简单:sudo apt update && sudo apt install default-jdk,然后用ja va -version确认一下版本。环境变量这块,编辑~/.bashrc,加上export JA VA_HOME=/usr/lib/jvm/ja va-版本号-amd64(具体版本号换成实际安装的),再补上export PATH=$JA VA_HOME/bin:$PATH,最后source ~/.bashrc使其生效。编译Ja va代码时,记得加个-g参数,比如ja vac -g HelloWorld.ja va,这样生成的class文件里会包含调试信息,后续看变量值和行号都方便。
二、命令行调试(jdb工具)
jdb是JDK自带的命令行调试器,对于习惯终端操作的人来说,轻量又直接。基本流程是这样的:
- 启动调试会话:直接输入
jdb HelloWorld(HelloWorld是类名),进入调试模式。 - 设置断点:用
stop in HelloWorld.main在main方法第一行停下,或者stop at HelloWorld:7在指定行号设置断点。 - 启动程序:输入
run,程序会跑到断点处暂停。 - 单步调试:
step会进入方法内部,next跳过方法调用,逐行执行。 - 查看变量:
print a看变量a的值,locals列出当前帧所有局部变量。 - 继续执行:
cont让程序继续跑到下一个断点或结束。
虽然命令行界面没那么直观,但胜在够用,而且不依赖任何IDE。
三、IDE图形化调试(推荐)
IntelliJ IDEA、Eclipse这类IDE的图形化调试界面,效率确实高不少。操作要点如下:
- 设置断点:在代码行号左侧点击一下,出现红色圆点就是断点。
- 启动调试:右键点击包含
main方法的文件,选择“Debug File”(IntelliJ IDEA)或“Debug As → Ja va Application”(Eclipse)。 - 单步操作:工具栏里的“Step Into”(进入方法)、“Step Over”(跳过方法)、“Step Return”(跳出方法),配合使用很顺手。
- 查看变量与表达式:在“Variables”面板看当前变量值;或者用“Evaluate Expression”(Alt+F8)输入自定义表达式,比如
a + b,直接计算结果。 - 修改变量值:在“Variables”面板双击变量值,比如把
a从5改成10,看看程序行为会怎么变,这招在排查逻辑时特别好用。
四、远程调试配置
如果程序跑在远程Ubuntu服务器上,需要开启远程调试功能。步骤如下:
- 启动程序时添加JVM参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,端口可以自定义,这里用5005。 - IDE连接远程调试:在IntelliJ IDEA中点击“Run → Edit Configurations”,添加“Remote JVM Debug”配置,填入远程服务器IP和端口,点击“Debug”就连上了。
远程调试最大的好处是实时排查生产环境问题,而且不需要重启服务,非常实用。
五、高级调试技巧
- 条件断点:在IDE断点视图里右键点击断点,选“Condition”,输入布尔表达式,比如
i == 5。只有条件满足时程序才会暂停,省去了大量无意义的单步执行。 - 异常断点:添加Ja va Exception Breakpoint,比如
NullPointerException,程序抛出该异常时自动暂停,快速定位异常发生位置。 - 监视点:右键点击类属性,选“Add Watchpoint”,当属性被访问或修改时暂停,排查变量被意外修改的问题首选。
- 日志与性能分析:用
System.out.println或日志框架(如Log4j)打详细日志,辅助排查难以复现的问题。同时可以用top -p $(pgrep -f 程序名)监控CPU和内存,或者借助VisualVM、JProfiler分析内存泄漏、CPU占用过高等性能瓶颈。
以上这些技巧,从基础到进阶,覆盖了Ubuntu下Ja va调试的常见场景。实际用起来,可以根据具体需求灵活组合,效率自然会上去。