Java编译后在Ubuntu下的调试方法
在Ubuntu上调试Java程序前,需确保已安装JDK并正确配置环境变量。以OpenJDK 11为例,操作步骤如下:
sudo apt update && sudo apt install openjdk-11-jdk
,安装完成后通过java -version
验证安装是否成功。~/.bashrc
文件(或/etc/environment
),添加以下内容:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换为实际Java版本路径
export PATH=$JAVA_HOME/bin:$PATH
保存后执行source ~/.bashrc
使配置生效。jdb是JDK自带的命令行调试工具,无需安装额外软件,适合熟悉命令行的开发者。
-g
选项编译Java文件,确保生成的字节码包含变量名、行号等调试信息。例如:javac -g HelloWorld.java
jdb HelloWorld
(适用于未打包的类)。jps
命令查看进程ID(如12345
),再执行jdb -attach 12345
。stop at HelloWorld:7
:在第7行设置断点(将HelloWorld
替换为类名,7
替换为行号)。run
:启动程序,程序会在断点处暂停。next
(或n
):执行下一行代码(不进入方法内部)。step
(或s
):进入当前行调用的方法内部。print variableName
(或p variableName
):查看变量的当前值(如print sum
)。continue
(或c
):继续执行程序直到下一个断点或程序结束。IDE(如IntelliJ IDEA、Eclipse)提供图形化界面,大幅简化调试流程,适合大多数开发者。
Create New Project
(新建项目)或Open
(打开现有项目)。int sum = add(a, b);
行)。main
方法的类文件,选择Debug '类名.main()'
(如Debug 'HelloWorld.main()'
),或点击顶部工具栏的绿色虫子图标。Step Over
(F8
,执行当前行)、Step Into
(F7
,进入方法内部)、Step Out
(Shift+F8
,跳出当前方法)。Debug
窗口的Variables
标签中,可查看当前作用域内的变量值;右键点击变量选择Evaluate Expression
(Alt+F8
),可计算表达式结果。Resume Program
(F9
),程序会继续运行直到下一个断点或结束。File -> New -> Java Project
(新建项目)或File -> Open Project
(打开现有项目)。Debug As -> Java Application
。Debug
视图(Window -> Show View -> Debug
)中的按钮进行Step Into
、Step Over
、Resume
等操作。Variables
视图中查看变量值,或在Expressions
视图中添加自定义表达式。若Java程序运行在远程Ubuntu服务器上,可通过远程调试功能连接本地IDE进行调试。
5005
为例):java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar myapp.jar
server=y
:表示服务器等待调试器连接。suspend=y
:表示程序启动后会暂停,等待调试器连接后再继续(若不想暂停,可设置为n
)。Run -> Edit Configurations
,点击+
号选择Remote JVM Debug
,设置Host
(服务器IP地址)、Port
(如5005
),点击Apply
后点击Debug
。Run -> Debug Configurations
,双击Remote Java Application
,设置Host
、Port
,点击Debug
。log4j.properties
或logback.xml
中配置日志级别(如DEBUG
),通过日志输出定位问题。jstack
命令生成线程快照,查看线程堆栈信息(如死锁、线程阻塞),命令格式为jstack <pid>
(pid
为Java进程ID,可通过jps
查看)。