java jdwp如何关闭_JVM 技术详解:Java 平台调试体系(JDWP)简介
Java 平台调试体系(Java Platform Debugger Architecture,JPDA),由三个相对独立的层次共同组成。这三个层次由低到高分别是 Java 虚拟机工具接口(JVMTI)、Java 调试连接协议(JDWP)以及 Java 调试接口(JDI)。模块层次编程语言作用JVMTI底层C获取及控制当前虚拟机状态JDWP中间层C定义 JVMTI 和 JDI 交互的数据格式JDI
Java 平台调试体系(Java Platform Debugger Architecture,JPDA),由三个相对独立的层次共同组成。这三个层次由低到高分别是 Java 虚拟机工具接口(JVMTI)、Java 调试连接协议(JDWP)以及 Java 调试接口(JDI)。
模块
层次
编程语言
作用
JVMTI
底层
C
获取及控制当前虚拟机状态
JDWP
中间层
C
定义 JVMTI 和 JDI 交互的数据格式
JDI
高层
Java
提供 Java API 来远程控制被调试虚拟机
详细介绍请参考或搜索:
JPDA 体系概览。
服务端 JVM 配置
本篇主要讲解如何在 JVM 中启用 JDWP,以供远程调试。 假设主启动类是 com.xxx.Test。
在 Windows 机器上:
java -Xdebug -Xrunjdwp:transport=dt_shmem,address=debug,server=y,suspend=y com.xxx.Test
在 Solaris 或 Linux 操作系统上:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=y com.xxx.Test
其实,-Xdebug 这个选项什么用都没有,官方说是为了历史兼容性,避免报错才没有删除。
另外这个参数配置里的 suspend=y 会让 Java 进程启动时先挂起,等到有调试器连接上以后继续执行程序。
而如果改成 suspend=n 的话,则此 Java 进程会直接执行,但是我们可以随时通过调试器连上进程。
就是说,比如说我们启动一个 Web 服务器进程,当这个值是 y 的时候,服务器的 JVM 初始化以后不会启动 Web 服务器,会一直等到我们用 IDEA 或 Eclipse、JDB 等工具连上这个 Java 进程后,再继续启动 Web 服务器。而如果是 n 的话,则会不管有没有调试器连接,都会正常运行。
通过这些启动参数,Test 类将运行在调试模式下,并等待调试器连接到 JVM 的调试地址:在 Windows 上是 Debug,在 Oracle Solaris 或 Linux 操作系统上是 8888 端口。
如果细心观察的话,会发现 IDEA 中 Debug 模式启动的程序,自动设置了类似的启动选项。
JDB
更多推荐
所有评论(0)