Java的JDI如果不是JVMTI怎么跨平台?
How is Java's JDI cross platform if JVMTI is not?
所以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 agent提供的,它使用JVM TI与JVM进行通信。
jdwp agent是一个原生库,当然是针对各个平台单独编译的。
该库包含在标准 JDK 包中。因此,特定于平台的部分已经由 JDK.
提供
所以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 agent提供的,它使用JVM TI与JVM进行通信。
jdwp agent是一个原生库,当然是针对各个平台单独编译的。 该库包含在标准 JDK 包中。因此,特定于平台的部分已经由 JDK.
提供