温馨提示×

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_HOMEPATH 正确(例如在 ~/.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 自带命令行调试器):
    1. 编译:javac -g HelloWorld.java
    2. 启动:jdb HelloWorld
    3. 设断点:stop in HelloWorld.main 或 stop at HelloWorld:7
    4. 运行与单步: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 导出堆进一步分析。

0