怎样在Ubuntu上调试Java编译代码
在Ubuntu上调试Java代码,可通过命令行工具(适合习惯终端操作的用户)或集成开发环境(IDE)(提供图形化界面,提升效率)实现。以下是具体方法:
调试前需确保系统安装了JDK(Java Development Kit),并编译代码时包含调试信息(用于查看变量、行号等细节)。
sudo apt update
sudo apt install openjdk-17-jdk
java -version
javac -version
javac编译Java文件时,添加-g参数(生成调试信息,包括局部变量、行号等):javac -g YourJavaFile.java
-g,调试时可能无法查看变量值或准确定位行号。jdb是JDK自带的命令行调试工具,适合熟悉终端的用户,支持设置断点、单步执行、查看变量等功能。
jdb启动调试会话(替换YourJavaFile为你的类名):jdb YourJavaFile
java YourJavaFile &后台启动),可通过jps命令查找进程ID(PID),再用jdb -attach <PID>附加:jps  # 查看Java进程ID
jdb -attach 12345  # 替换为实际PID
stop at YourJavaFile:行号
stop at YourJavaFile:10
run命令启动程序,程序会在断点处暂停:run
next(或n):执行下一行(不进入方法内部);step(或s):执行下一行(进入方法内部);continue(或c):继续执行程序直到下一个断点或结束;print(或p):查看变量值(如print sum查看变量sum的值);locals:查看当前作用域的所有局部变量;quit:退出调试。IDE提供图形化界面,操作更直观,适合大多数开发者。以下以IntelliJ IDEA(社区版免费)为例,步骤如下:
idea.sh启动。File → New → Project,勾选Java,设置项目路径和SDK(选择已安装的JDK);File → Open,导航到项目目录导入。int sum = add(a, b);行)。main方法的Java文件,选择Debug 'YourClassName.main()'(或点击顶部工具栏的Debug按钮)。程序会在断点处暂停,进入调试模式。Step Over(F8):执行当前行,不进入方法;Step Into(F7):进入当前行的方法内部;Step Out(Shift+F8):跳出当前方法;Variables面板中查看当前作用域的变量值(可修改变量值测试);Debug窗口的Frames标签中查看方法调用链;Resume Program(F9)继续运行直到下一个断点或结束。若Java程序运行在远程Ubuntu服务器上,可通过远程调试连接本地IDE进行调试。步骤如下:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar YourApp.jar
transport=dt_socket:使用socket通信;server=y:作为调试服务器;suspend=n:不暂停程序(若设为y,程序会等待调试器连接后再启动);address=5005:调试端口(可自定义,如5005)。Run → Edit Configurations;+号,选择Remote JVM Debug;Name(如Remote Debug),Host(远程服务器IP),Port(与address一致,如5005);Apply→OK保存配置。Debug按钮(虫子图标),连接远程服务器。程序运行到断点时会暂停,可像本地调试一样操作。jvisualvm命令启动(需安装visualvm包)。Log4j或SLF4J),记录关键流程和变量值,帮助定位问题(非实时调试,适合复现问题)。以上方法覆盖了Ubuntu上调试Java代码的常见场景,可根据需求选择合适的方式(命令行适合快速排查,IDE适合复杂项目,远程调试适合分布式系统)。