温馨提示×

Ubuntu如何进行Java编译调试

小樊
43
2025-11-22 20:47:40
栏目: 编程语言

Ubuntu下Java的编译与调试指南

一 环境准备

  • 安装 JDK(推荐 OpenJDK 11 或系统默认 JDK):
    • 安装命令:sudo apt update && sudo apt install openjdk-11-jdk(或 sudo apt install default-jdk
    • 验证版本:java -versionjavac -version
  • 配置 JAVA_HOME(可选,便于多版本管理):
    • 查找安装路径:sudo update-alternatives --config java 查看所选 Java 路径
    • 写入配置:echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc
    • 使生效:source ~/.bashrc,验证:echo $JAVA_HOME
  • 说明:编译用 javac,运行用 java;两者版本应匹配。

二 命令行编译与运行

  • 单文件:
    • 编译:javac HelloWorld.java(生成 HelloWorld.class
    • 运行:java HelloWorld(注意:运行时不要加 .class 后缀)
  • 多文件与依赖:
    • 同时编译多个源文件:javac File1.java File2.java File3.java
    • 指定输出目录与类路径:
      • 编译:javac -d out -cp ".:/path/to/lib.jar" HelloWorld.java
      • 运行:java -cp ".:/path/to/lib.jar:out" HelloWorld
  • 小技巧:一键编译运行 javac HelloWorld.java && java HelloWorld

三 命令行调试 JDWP 与 JDB

  • JDWP 远程/本地调试(Attach 模式常用)
    • 启动应用并等待调试器连接(程序会暂停,直到调试器接入):
      • 命令:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -cp . HelloWorld
      • 说明:
        • transport=dt_socket 使用套接字传输
        • server=y 作为调试服务器等待连接
        • suspend=y 启动即挂起(改为 n 则直接运行,随时可连)
        • address=*:5005 监听 5005 端口(所有地址);远程调试请开放防火墙端口
    • 连接调试器(另一个终端或 IDE):
      • 使用 jdbjdb -attach localhost:5005
      • 或在 IDE(IntelliJ/Eclipse)创建 “Remote JVM Debug” 配置,主机填 localhost,端口 5005
  • 使用 JDB 直接调试
    • 启动:jdb HelloWorld
    • 常用命令:
      • 断点:stop in HelloWorld.mainstop at HelloWorld:行号
      • 运行:run
      • 单步:step(步入)、next(步过)
      • 继续:cont
      • 打印:print 变量名
      • 栈与线程:wherethreads
  • 提示:JDWP 适合调试已在运行的服务进程;JDB 适合从入口开始逐步调试。

四 使用 IDE 进行图形化调试

  • IntelliJ IDEA
    • 新建 Java 项目 → 在代码行号左侧点下断点 → 点击工具栏“虫子”图标启动调试 → 使用 Step Over/Into/Return、观察变量与表达式
  • Eclipse
    • File → New → Java Project → 在断点处右键 “Debug As” → Java Application → 使用 Step Into/Over/Return、变量视图
  • NetBeans
    • File → New Project → Java → Java Application → 断点 → 右键 “Debug File” 或 Debug 项目
  • 说明:IDE 提供断点、单步、变量/栈/表达式监视、热替换等高级能力,适合复杂项目。

五 常见问题与进阶排查

  • 版本与类路径
    • 同时检查 java -versionjavac -version;确保运行时类路径包含你的 .class 输出目录与依赖 JAR
    • 示例:java -cp ".:lib/*:out" HelloWorld
  • 端口与防火墙
    • JDWP 端口(如 5005)需开放;远程调试时确保网络可达与端口未被占用
  • 线上问题定位
    • 线程堆栈:jstack <PID> 查看线程状态与锁竞争
    • GC 监控:jstat -gcutil <PID> 1000 观察 Full GC 频率
    • 堆转储:jmap -dump:format=b,file=heap.hprof <PID> 后用 MAT/VisualVM 分析
  • 多版本切换
    • 使用 sudo update-alternatives --config java 选择系统默认 java,保持与 javac 一致

0