Java程序在Linux中的调试方法
jdb是JDK自带的命令行调试工具,适用于无图形界面的Linux环境,支持断点设置、单步执行、变量查看等基础调试功能。
javac -g命令编译Java源文件(如javac -g HelloWorld.java),-g选项会生成行号、局部变量等调试信息,是jdb正常工作的前提。jdb ClassName命令启动调试会话(如jdb HelloWorld),进入命令行交互界面。stop at ClassName:LineNumber:在指定类的指定行设置断点(如stop at HelloWorld:3);run:启动程序,执行到断点处暂停;step:进入当前行调用的方法内部;next:执行当前行,不进入方法内部;print VariableName:查看指定变量的值(如print message);continue:继续执行程序,直到下一个断点或程序结束。IntelliJ IDEA和Eclipse是Java开发的主流IDE,提供图形化调试界面,支持断点管理、变量监视、堆栈跟踪、表达式求值等高级功能,大幅提升调试效率。
Shift+F9启动调试模式;远程调试适用于调试运行在Linux服务器上的Java应用(如生产环境、分布式系统),通过JDWP(Java Debug Wire Protocol)实现本地IDE与远程JVM的通信。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar
参数说明:transport=dt_socket(使用socket传输)、server=y(作为调试服务器)、suspend=n(不暂停等待调试器连接,若需暂停则设为y)、address=*:5005(监听所有IP的5005端口)。日志是生产环境调试的重要手段,通过记录程序执行过程中的关键信息(如方法调用、变量值、异常堆栈),帮助开发者定位问题。
java.util.logging.Logger记录日志,示例代码:import java.util.logging.Logger;
public class MyLogger {
private static final Logger logger = Logger.getLogger(MyLogger.class.getName());
public static void main(String[] args) {
logger.info("程序启动");
logger.warning("这是一个警告信息");
logger.severe("这是一个严重错误");
}
}
配置logging.properties文件调整日志级别(如.level=INFO)和输出格式。log4j2.xml配置文件设置日志输出(控制台、文件)、级别(DEBUG/INFO/ERROR)和格式。示例代码:import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MyLogger {
private static final Logger logger = LogManager.getLogger(MyLogger.class);
public static void main(String[] args) {
logger.debug("调试信息");
logger.info("程序运行中");
logger.error("发生错误", new Exception("测试异常"));
}
}
添加Maven依赖:<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
性能问题(如CPU过高、内存泄漏、线程阻塞)是Java应用常见问题,需通过性能分析工具定位。
jvisualvm,连接远程Linux服务器的JVM进程(需开启JMX参数:-Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false)。-agentpath:/path/to/jprofiler/bin/linux-x64/libjprofilerti.so=port=8849),通过IDE连接到JProfiler进行调试。