引入:上文我们讲解了Agent如何利用环境指针访问VM的操作断点部分,这里我们详细讲解观察字段篇。这也是我们调试期间用的最多的操作。因为我们要不断从WatchField看他们值的改变。分类8:观察字段a.SetFieldAccessWatch.启用对某字段进行访问的观察。每次访问都会创建一个Field..
分类:
其他好文 时间:
2014-12-09 12:27:58
阅读次数:
210
引入:我们在前面说到JVMTI的客户端Agent,又提到Agent通过环境指针来访问VM。这里就来看看环境指针到底有多大的访问VM的能力。分类1:内存管理a.Allocate.分配内存jvmtiError
Allocate(jvmtiEnv*env,
jlongsize,
unsignedchar**mem_ptr)size:分配的字节数.mem_ptr:分配内存的首..
分类:
其他好文 时间:
2014-12-09 01:59:47
阅读次数:
247
引入:现在我们来看JDWP层的数据包。源码在JDK中很容易找到,它定义$JAVA_HOME/include/jdwpTransport.h头文件中。分析:Part1:握手过程(handshake)握手包发生在Debugger(JDI端)和TargetVM(JVMTI端)的传输层连接建立,并且在发送任何实际数据报之前完成的。它过程如下:a.D..
分类:
其他好文 时间:
2014-12-08 19:48:29
阅读次数:
200
引入:我们先从最重要的通信层讲起。通信层(JDWP),它的全称是JavaDebugWireProtocol。从"Wire"这词就可以看出,它主要是起到"连线”的作用,也就是说,它主要是起到把最靠近程序员的JDI(也就是调试器)和最靠近运行在虚拟机中的程序的JVMTI连接在一起。因为彼此之间语言不通。..
分类:
其他好文 时间:
2014-12-08 15:47:56
阅读次数:
415
前言在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMTI 等,才能监测 Java 程序运行过程中的 JVM 和系统的一系列情况,这种方式一直以来被人所诟病...
分类:
其他好文 时间:
2014-07-22 22:56:55
阅读次数:
394
在Java多线程程序中,由于线程调度,指令间的次序在每次运行时都可能不相同,有时候,我们需要得到指令次序,用来分析程序的行为。这样细粒度的底层行为用一般方法很难完成,我们需要借助 JVM Tool Interface,即JVMTI,来帮助我们获取Java虚拟机执行时的信息。本文先介绍编写JVMTI程序的基本框架,然后介绍如何使用JVMTI来获取多线程程序中指令之间的次序。...
分类:
编程语言 时间:
2014-04-29 13:11:22
阅读次数:
892