在命令行(无 IDE)下调试 Java 程序,常用方式有以下几种,从最基础到最专业依次说明:
适合简单问题。
System.out.println("x = " + x);
或使用日志框架(推荐):
import java.util.logging.*;
Logger logger = Logger.getLogger("MyApp");
logger.info("x = " + x);
✅ 优点:简单
❌ 缺点:不能动态控制、效率低
jdb(JDK 自带命令行调试器)JDK 自带,无需额外安装。
javac -g Hello.java
jdb Hello
stop at Hello:10 # 在第10行断点
run # 运行程序
step # 单步进入
next # 单步跳过
cont # 继续执行
print x # 打印变量
list # 查看源码
quit # 退出
✅ 优点:官方自带
❌ 缺点:交互不友好,效率低
用 IDE(IDEA / Eclipse)连命令行 Java 程序
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar app.jar
参数说明:
address=5005:调试端口suspend=y:启动后暂停,等调试器连接suspend=n:直接运行localhost5005✅ 优点:体验最好
✅ 适合服务器 / 容器 / 生产环境
适合性能、内存、线程问题。
jstack <pid>
jmap -heap <pid>
jmap -dump:live,format=b,file=heap.hprof <pid>
jstat -gcutil <pid> 1000
jvisualvm
| 场景 | 推荐方式 |
|---|---|
| 本地快速看问题 | 日志 |
| 命令行环境 | jdb |
| 服务器 / Docker | 远程调试 |
| 性能 / 死锁 | jstack + VisualVM |
# 编译
javac -g App.java
# 启动
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 App
然后 IDE 连 localhost:5005 即可断点调试。
如果你愿意,可以告诉我:
我可以给你更精确的调试方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。