怎样在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:行号
例如,在第10行设置断点: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适合复杂项目,远程调试适合分布式系统)。