如果 JVMTI 不是,Java 的 JDI 跨平台如何?

问题描述

所以Java的调试接口使用JVMTI作为后端....但是JVMTI需要在目标架构上编译,那么JDI使用的这些JVMTI函数是否预先编译并作为库与JDK一起提供?这意味着我可以在不使用 JDI 的情况下使用那些预编译库……是吗?我假设只有少数函数已经编译,但如果我需要这些函数,那么我不需要自己编译它们......

解决方法

看看Java Platform Debugger Architecture

                /    |--------------|
               /     |     VM       |
 debuggee ----(      |--------------|  <------- JVM TI - Java VM Tool Interface
               \     |   back-end   |
                \    |--------------|
                /           |
 comm channel -(            |  <--------------- JDWP - Java Debug Wire Protocol
                \           |
                     |--------------|
                     | front-end    |
                     |--------------|  <------- JDI - Java Debug Interface
                     |      UI      |
                     |--------------|
  • JDI 工作在 JDWP 之上;
  • 在 JVM 方面,JDWP 由 jdwp 代理提供,它使用 JVM TI 与 JVM 进行通信。

jdwp agent 是原生库,当然是针对每个平台单独编译的。 该库包含在标准 JDK 包中。因此,特定于平台的部分已经由 JDK 提供。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...