Ubuntu Java如何调试程序错误
小樊
32
2025-12-10 10:13:50
Ubuntu 下 Java 程序错误调试指南
一 环境准备与快速自检
- 安装 JDK:sudo apt update && sudo apt install default-jdk(或安装具体版本如 openjdk-11-jdk)。
- 版本与工具检查:java -version、javac -version;确保 JAVA_HOME 与 PATH 正确(例如在 ~/.bashrc 中设置并 source 生效)。
- 编译带调试信息:javac -g YourClass.java(生成行号、局部变量等调试信息,便于断点与单步)。
- 运行与定位:java YourMainClass;若异常,先阅读异常堆栈的最顶部“Caused by”行,定位到具体类与行号。
二 使用 IDE 图形化调试
- Eclipse:创建/导入项目 → 在行号左侧点下断点 → 右键“Debug As → Java Application” → 使用 Step Into/Over/Return、观察 Variables/Call Stack。
- IntelliJ IDEA:创建项目 → 设断点 → 右键“Debug ‘类名.main()’” → 使用 Step、Evaluate Expression、Watches。
- NetBeans:新建 Java 项目 → 设断点 → “Debug File” → 使用 Step Into/Over 与变量视图。
- VS Code:安装 Java 扩展包 → 配置 launch.json 的调试类型(如 java) → F5 启动调试。
三 命令行与远程调试
- 使用 jdb(JDK 自带命令行调试器):
- 编译:javac -g HelloWorld.java
- 启动:jdb HelloWorld
- 设断点:stop in HelloWorld.main 或 stop at HelloWorld:7
- 运行与单步:run、step、next、cont、print var
- 远程调试(服务器/容器场景):
- 启动目标 Java 进程(示例开放端口 5005):
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
- 本地 IDE 新建 “Remote JVM Debug” 配置,主机填服务器 IP,端口 5005,即可连接调试。
四 运行期诊断与性能分析工具
- 线程与死锁:
- 查进程:jps
- 线程快照:jstack (分析 BLOCKED/WAITING 与锁信息)
- GC 与内存压力:
- GC 概况:jstat -gcutil 1000(每 1s 打印一次,关注 Full GC 次数与耗时)
- 堆转储与分析:jmap -dump:format=b,file=heap.hprof (再用 MAT/JVisualVM 分析泄漏)
- 生产问题定位:
- 结合日志框架(如 SLF4J+Logback)输出关键路径与异常堆栈,便于回溯。
- 性能剖析:使用 Java Mission Control(JMC) 附加到目标进程,分析 CPU、内存分配、线程与事件。
五 常见错误与排查清单
- 编译/运行类路径问题:确保 -cp 包含所有依赖 JAR;常见写法:
javac -cp “.:/path/to/lib.jar” Your.java;java -cp “.:/path/to/lib.jar” your.Main
- 版本不匹配:java 与 javac 版本一致;必要时切换 JAVA_HOME 指向目标 JDK。
- 断点不生效:确认编译时使用了 -g;源码与字节码对应;在 IDE 中启用断点。
- 远程连不上:检查服务器防火墙/安全组是否放行调试端口(如 5005),以及 address= 配置是否与 IDE 一致。
- 高 CPU/卡顿:先用 jstack 看热点线程,再用 jstat 观察 GC,必要时 jmap 导出堆进一步分析。