java如何调试
Java 调试方法
使用 IDE 内置调试器
现代 Java IDE(如 IntelliJ IDEA、Eclipse)均提供强大的调试功能。
- 设置断点:在代码行号旁点击,添加断点。
- 启动调试模式:右键选择
Debug而非Run,程序会在断点处暂停。 - 单步执行:使用
Step Over(跳过方法)、Step Into(进入方法)逐行跟踪。 - 查看变量:调试窗口会显示当前作用域的变量值。
命令行调试(JDWP)
通过 Java Debug Wire Protocol(JDWP)实现远程或本地调试。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 MyApp
suspend=y表示启动时暂停,等待调试器连接。- 在 IDE 中配置远程调试,指定相同端口(如 5005)。
日志调试
通过日志框架(如 SLF4J + Logback)输出关键信息:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void myMethod() {
logger.debug("Variable value: {}", someVariable);
}
}
配置日志级别为 DEBUG 以查看详细输出。

JDB(Java Debugger)
JDK 自带的命令行调试工具,适用于无 IDE 环境:
jdb -attach 5005 # 连接已运行的 JDWP 服务
jdb -classpath . MyClass # 直接启动调试
常用命令:
stop at MyClass:20:在第 20 行设置断点。step/next:单步执行。print variable:打印变量值。
断言(Assertion)
在代码中插入断言检查条件是否满足:

assert param != null : "参数不能为 null";
需通过 -ea 参数启用断言:
java -ea MyClass
异常堆栈分析
捕获异常时打印完整堆栈信息:
try {
// 可能出错的代码
} catch (Exception e) {
e.printStackTrace(); // 或 logger.error("Error", e);
}
第三方工具
- VisualVM:监控 JVM 状态、线程和内存。
- Arthas:阿里开源的运行时诊断工具,支持动态跟踪方法调用。
- JProfiler:商业性能分析工具,可检测内存泄漏和性能瓶颈。
单元测试调试
在 JUnit 测试中使用断言和 IDE 调试功能:
@Test
public void testMethod() {
MyClass obj = new MyClass();
assertEquals(42, obj.calculate()); // 失败时会抛出异常
}
通过结合以上方法,可以高效定位和解决 Java 程序中的逻辑错误、性能问题及异常行为。






