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查看)。