JAVA远程调试
很多时候,我们的服务不是在本地,而是在远程服务器上。这时候出了问题,大多数是通过日志判断。
下面记录一种能远程连接服务器进行debug的方式
# 启动命令格式
java -jar ${OPT} demo.jar
# OPT内容
JDK 9↑
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
JDK 5-8
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
# IDEA 使用
编辑
设置
# 参数详情:
参数 | 示例值 | 描述 |
---|---|---|
transport | dt_socket | 指定运行的被调试应用和调试者之间的通信协议 |
address | 5000 | 远程被调试应用开通的端口 |
server | y | 开启调试server端 y(Attach 模式)等待有调试器Attach过来, n (Listen 模式)等待服务调用 |
suspend | n | 用来告知 JVM 立即执行,不要等待未来将要附着上/连上(attached)的调试者。 如果设成 y, 则应用将暂停不运行,直到有调试者连接上 |
# Google出来的原理:
# Agents
- JVM运行时允许外部注入的库(Java或C++写的libraries)它们有能力修改运行中 .class 文件的内容。
- 传递一个 Agent Lib 给 JVM, 添加启动参数 agentlib:libname[=options] 。例如:远程调试:-agentlib:jdwp=...
- jdwp agent 会建立运行应用的 JVM 和调试者(本地或者远程)之间的桥梁,能拦截运行的代码。
上次更新: 2024/11/05, 08:29:31