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 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

你可能感兴趣的:(java,jdwp如何关闭)