CentOS Java代码调试方法
在CentOS上调试Java代码前,需确保已安装Java Development Kit (JDK)(包含编译器javac
和调试工具jdb
)。推荐使用OpenJDK(如java-11-openjdk-devel
或java-8-openjdk-devel
),通过以下命令安装:
sudo yum install java-11-openjdk-devel # CentOS 8/Stream默认仓库
# 或 sudo dnf install java-11-openjdk-devel # CentOS 9+
安装完成后,验证安装:
java -version # 检查Java运行时版本
javac -version # 检查Java编译器版本
若未配置环境变量,需编辑~/.bashrc
(用户级)或/etc/profile
(系统级),添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 根据实际安装路径调整
export PATH=$JAVA_HOME/bin:$PATH
运行source ~/.bashrc
使配置生效。
现代IDE(如IntelliJ IDEA Community版、Eclipse)提供可视化调试功能,适合复杂项目。以IntelliJ IDEA为例:
HelloWorld
),选择“Debug ‘HelloWorld.main()’”。若无IDE,可使用JDK自带的jdb(Java Debugger)进行命令行调试:
-g
选项保留变量名、行号等信息:javac -g HelloWorld.java
jdb HelloWorld
stop at HelloWorld:4
:在HelloWorld.java
的第4行设置断点。run
:启动程序,程序会在断点处暂停。next
(或n
):执行当前行,跳过方法内部。step
(或s
):进入当前行的方法内部。print args[0]
:打印变量args[0]
的值。continue
(或c
):继续执行至下一个断点或程序结束。quit
:退出调试。若Java应用运行在Docker容器或远程CentOS服务器上,需通过远程调试连接:
application.properties
中添加:server.address=0.0.0.0 # 允许远程访问
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -cp . HelloWorld
参数说明:transport=dt_socket
(使用socket通信)、server=y
(作为调试服务器)、address=*:5005
(监听所有IP的5005端口)。sudo firewall-cmd --zone=public --add-port=5005/tcp --permanent # 开放5005端口
sudo firewall-cmd --reload # 重新加载防火墙规则
localhost
(若为Docker宿主机)。address
一致)。System.out.println
,记录程序执行流程和变量值。例如,添加Logback依赖后,在代码中写入:import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
public static void main(String[] args) {
logger.info("程序启动,参数:{}", String.join(", ", args)); // 记录参数
System.out.println("Hello, World!");
}
}
配置logback.xml
设置日志级别(如DEBUG
),将日志输出到文件(如/var/log/myapp.log
)。Exception in thread "main" java.lang.NullPointerException
at HelloWorld.main(HelloWorld.java:5) # 错误发生在HelloWorld.java的第5行
根据堆栈信息快速找到问题代码。使用JUnit框架编写单元测试,针对单个模块(如方法)进行调试,避免影响整个应用。以IntelliJ IDEA为例:
pom.xml
中添加):<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result); // 断言结果是否符合预期
}
}