ca88手机版登录网页按钮控件的id,调节和测试种类

Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调节和测试种类

Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调节和测试种类

 

 

一. Swing Inspector是3个Java Swing/AWT用户界面分析和调节工具,功用与firebug类似,二

1. Swing Inspector是3个Java Swing/AWT用户界面分析和调节工具,功能与firebug类似,2

2. 类似spylite ,firebug3

2. 类似spylite ,firebug3

3. Eclipse  vm param3

3. Eclipse  vm param3

4. Cltr+f12展现主界面三

四. Cltr+f1二来得主界面3

5. Ctrl+鼠标找到控件三

伍. Ctrl+鼠标找到控件3

陆. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测试种类布局的缩写。四

陆. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测试体系布局的缩写。四

陆.一. Java 调节和测试接口的特色4

陆.1. Java 调节和测试接口的表征四

6.2. JPDA 组成模块伍

六.2. JPDA 组成模块五

6.3. JVMTI 的简介6

6.3. JVMTI 的简介6

陆.四. Agent 的行事经过柒

陆.四. Agent 的劳作进程7

6.4.1. 启动7

6.4.1. 启动7

陆.伍. JVMTI 基本功用7

陆.⑤. JVMTI 基本功效七

6.5.1. 事件处理和回调函数7

陆.⑤.1. 事件处理和回调函数7

陆.5.贰. 内存控制和对象得到八

陆.伍.2. 内存控制和对象得到捌

6.5.3. 线程和锁8

陆.5.三. 线程和锁8

陆.五.四. 调剂功用玖

6.5.四. 调节功效玖

陆.6. 至关心器重要部分九

6.陆. 首要部分玖

6.六.1. Java 虚拟机工具接口(JVMTI)九

陆.6.一. Java 虚拟机工具接口(JVMTI)玖

陆.陆.二. Java 调节和测试线协议(JDWP)九

陆.六.二. Java 调节和测试线协议(JDWP)九

6.六.3. Java 调节和测试接口(JDI)拾

六.陆.三. Java 调试接口(JDI)拾

7. 找到源码10

7. 找到源码拾

 

 

1. Swing Inspector是三个Java Swing/AWT用户界面分析和调剂工具,功效与firebug类似,

怀有强有力的Swing/AWT用户界面分析和调节相关作用。 适用于从java swing初级到高级的具有开发职员,能够高效定位难题,UI连忙调试,分析其余软件界面包车型地铁完毕原理,可以给支付工效带来大幅升级。

特点:

一. 具备UI组件联合浮动作效果应,在用户界面中Ctrl+移动鼠标(Mac OSX ⌘+F1二),能够在Swing Inspector主界面中呈现对应组件音讯,并高亮当前Component。

2. 足以在Swing Inspector组件树中联合浮动到用户界面,即双向联合浮动,且不要求提供界面包车型客车源代码。

三. Applet支持,能够固定嵌入到别的网页中的applet界面。

四. 强劲的window捕获效能,能够捕获加载agent的jvm创立的兼具Swing/AWT窗口(网页中的applet,浏览器加载appet/webstart后开发银行的console窗口),形式对话框等。

5. 灰褐,无需安装,只需给java命令添加1行参数,即可运转Swing Inspector。

陆. 支撑具有的AWT/Swing程序,netbeans、visualvm等。

7. 强大的表明式支持,允许对选定组进执行表明式运算,实时彰显总计结果,运算结果协助属性浏览和编写制定。

八. 强有力的Javascript协助成效,匡助用javascript实时修改用户界面中的组件,执行脚本后随即生效。

玖. 高质量,大旨功能利用c/c++达成,直接操纵jvm,对质量影响非常小,主界面选用lazy机制,刷新组件时只更新可知viewer。属性编辑器可直接修改选定的零件属性,且一贯生效。

10. 能够记下组件添加到parent时的stacktrace,可以极快稳定到相应的代码行。

1一. 粗略易用,急速键与常用软件1致(F5刷新、Alt+Left后退,Alt+Right前进等),界面相当简洁、直观,未有上学开支。

1二. 免费,为软件行业前行尽一份力量是我们的宏旨

 

 

小编:: 老哇的爪子 Attilax 艾龙,  EMAIL:146651982九@qq.com

转发请评释来源: http://www.cnblogs.com/attilax/

 

壹. Swing Inspector是2个Java Swing/AWT用户界面分析和调节和测试工具,功效与firebug类似,

富有强有力的Swing/AWT用户界面分析和调节相关功用。 适用于从java swing初级到高档的富有开发人士,能够很快定位难题,UI快捷调节和测试,分析其余软件界面包车型地铁贯彻原理,能够给开发工效带来大幅度升级。

特点:

一. 具备UI组件联合浮动作效果应,在用户界面中Ctrl+移动鼠标(Mac OSX ⌘+F1二),能够在Swing Inspector主界面中呈现对应组件新闻,并高亮当前Component。

二. 能够在Swing Inspector组件树中联动到用户界面,即双向联合浮动,且不需求提供界面包车型大巴源代码。

三. Applet协理,能够稳定嵌入到其余网页中的applet界面。

四. 强有力的window捕获成效,能够捕获加载agent的jvm创设的保有Swing/AWT窗口(网页中的applet,浏览器加载appet/webstart后开发银行的console窗口),格局对话框等。

伍. 青莲,无需安装,只需给java命令添加一行参数,即可运营Swing Inspector。

6. 支撑具有的AWT/Swing程序,netbeans、visualvm等。

柒. 有力的表明式协助,允许对选定组进执行表明式运算,实时展现计算结果,运算结果援助属性浏览和编辑。

捌. 精锐的Javascript辅助成效,支持用javascript实时修改用户界面中的组件,执行脚本后迅即生效。

9. 高品质,宗旨效用使用c/c++完结,直接操纵jvm,对品质影响十分的小,主界面采纳lazy机制,刷新组件时只更新可知viewer。属性编辑器可向来修改选定的零部件属性,且一向生效。

十. 足以记录组件添加到parent时的stacktrace,可以急迅稳定到对应的代码行。

11. 简练易用,快速键与常用软件一致(F伍刷新、Alt+Left后退,Alt+Right前进等),界面分外简短、直观,未有读书开支。

1贰. 免费,为软件行业发展尽一份力量是大家的宗旨

 

 

笔者:: 老哇的爪子 Attilax 艾龙,  EMAIL:14665一玖八三玖@qq.com

转发请注解来源: http://blog.csdn.net/attilax

 

2. 类似spylite ,firebug

2. 类似spylite ,firebug

3. Eclipse  vm param

 

-agentpath:E:\swing-inspector-windows-1.2.2_beta7\Win32\swing-inspector-agent.dll

3. Eclipse  vm param

 

-agentpath:E:\swing-inspector-windows-1.2.2_beta7\Win32\swing-inspector-agent.dll

4. Cltr+f1二显得主界面

 

四. Cltr+f12展现主界面

 

5. Ctrl+鼠标找到控件

 

 

ca88手机版登录网页 1 

Create StackTrace – javax.swing.JLabel@7293796
    com.openbravo.pos.sales.JPanelTicket.initComponents(JPanelTicket.java:1226)
    com.openbravo.pos.sales.JPanelTicket.(JPanelTicket.java:187)
    com.openbravo.pos.sales.JPanelTicketSales.(JPanelTicketSales.java:18)
    aaaAtiDslParser.aaa33.main(aaa33.java:29

 

 

5. Ctrl+鼠标找到控件

 

 

 

Create StackTrace – javax.swing.JLabel@7293796
    com.openbravo.pos.sales.JPanelTicket.initComponents(JPanelTicket.java:1226)
    com.openbravo.pos.sales.JPanelTicket.(JPanelTicket.java:187)
    com.openbravo.pos.sales.JPanelTicketSales.(JPanelTicketSales.java:18)
    aaaAtiDslParser.aaa33.main(aaa33.java:29) 

 

 

6. javaagent的根本功能如下:

· 可以在加载class文书此前做阻止,对字节码做修改 

· 能够在运转期对已加载类的字节码做变更,可是那种气象下会有过多的限量,前边会详细说 

· 还有其它一些小众的效果 

o 获取具有曾经加载过的类 

o 获取具有曾经开首化过的类(执行过clinit方法,是地方的八个子集) 

o 获取有些对象的大小 

o 将有些jar插手到bootstrap classpath里当作高优先级被bootstrapClassloader加载 

o 将某个jar加入到classpath里供AppClassloard去加载 

o 设置有个别native方法的前缀,重要在搜索native方法的时候做规则匹配 

 

 

陆. javaagent的首要功用如下:

· 能够在加载class文件在此之前做阻止,对字节码做修改 

· 能够在运转期对已加载类的字节码做更改,可是那种情状下会有不少的界定,后边会详细说 

· 还有其余一些小众的效率 

o 获取具有曾经加载过的类 

o 获取具有曾经伊始化过的类(执行过clinit方法,是下面的一个子集) 

o 获取某些对象的大小 

o 将某些jar出席到bootstrap classpath里作为高优先级被bootstrapClassloader加载 

o 将某个jar加入到classpath里供AppClassloard去加载 

o 设置有些native方法的前缀,首要在寻觅native方法的时候做规则匹配 

 

 

柒. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测试连串布局的缩写。

透过 JPDA 提供的 API,开发人士能够便宜灵活的搭建 Java 调节和测试应用程序。 JPDA 主要由几个部分构成:Java 虚拟机工具接口(JVMTI)、Java 调节和测试线协议(JDWP),以及 Java 调节和测试接口(JDI)。

 

 

柒. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测试连串布局的缩写。

经过 JPDA 提供的 API,开发职员能够方便灵活的搭建 Java 调节和测试应用程序。 JPDA 首要由八个部分组成:Java 虚拟机工具接口(JVMTI)、Java 调试线协议(JDWP),以及 Java 调节和测试接口(JDI)。

 

 

柒.1. Java 调节和测试接口的表征

Java 语言是第1个利用虚拟机概念的盛行的编制程序语言,正是因为虚拟机的留存,使广大作业变得简单而轻松,驾驭了虚拟机,就控制了内部存款和储蓄器分配、线程管理、即时优化等等运营态。同样的,Java 调节和测试的面目,就是和虚拟机打交道,通过操作虚拟机来完毕观察调节和测试大家和好代码的目标。那几个特点决定了 Java 调节和测试接口和原先其余编制程序语言的高大不一致。

以 C/C++ 的调节和测试为例,近年来可比盛行的调剂工具是 GDB 和微软的 Visual Studio 自带的 debugger,在那种 debugger 中,首先,大家务必编写翻译1个“ debug ”方式的程序,那几个会比其实的 release 格局先后大过多。其次,在调节和测试进程中,debugger 将会深层接入程序的运行,明白和操纵运维态的某个讯息,并将那一个音讯霎时赶回。那种出席对运转的作用和内部存款和储蓄器占用都有肯定的急需。基于那一个供给,那些 Debugger 本身其实是提供了,只怕说,创造和管理了贰个运维态,由此他们的先后算法比较复杂,个头都对比大。对于远端的调节和测试,GDB 也从没很好的默许实现,当然,C/C++ 在那方面也绝非特意大的须要。

 

 

而 Java 则不一样,由于 Java 的运转态已经被虚拟机所很好地管理,由此作为 Java 的 Debugger 无需再自身成立叁个可控的运转态,而独自供给去操作虚拟机就能够了。 Java 的 JPDA 就是一套为调节和测试和优化服务的虚拟机的操作工具,个中,JVMTI 是组成在虚拟机中的接口,JDWP 是2个通信层,而 JDI 是前者为开发职员准备好的工具和平运动行库。

从构架上说,大家得以把 JPDA 看作成是八个 C/S 种类布局的使用,在那些构架下,大家能够便宜地经过互连网,在四意的地址调节和测试此外2个虚拟机上的程序,这些就很好地消除了布署和测试的题材,尤其知足化解了许多网络时期中的开发使用的供给。前端和后端的诀别,也利于用户支出适合于本身的调剂工具。

从功用上看,由于 Java 程序本人便是编写翻译成字节码,运维在虚拟机上的,由此调节和测试前后的程序、内部存款和储蓄器占用都不会有大变迁(仅仅是运营2个 JDWP 所急需的内部存款和储蓄器),任意档次都得以很好地调节和测试,拾贰分便于。而 JPDA 构架下的多少个组成都部队分,JDWP 和 JDI 都比较小,首要的工作能够让虚拟机自个儿达成。

从灵活性上,Java 调节和测试工具是树立在强大的虚拟机上的,因而,很多战线的选取,比如动态编写翻译运转,字节码的实时替换等等,都得以通过对虚拟机的改良而博得兑现。随着虚拟机技术的逐月升高和深入,各类不一样门类,不相同应用领域中虚拟机的产出,各样强大的功力的投入,给大家的调节和测试工具也带动众多新的应用。

简而言之,3个后天的,可控的周转态给 Java 的调剂工作,给 Java 调节和测试接口带来了大幅度的优势和有利于。通过 JPDA 这些专业,大家得以从虚拟机中获得大家所须要的新闻,完成大家所期待的操作,更好地付出大家的程序。

 

七.一. Java 调节和测试接口的特征

Java 语言是率先个应用虚拟机概念的风行的编制程序语言,便是因为虚拟机的存在,使许多工作变得不难而轻松,精晓了虚拟机,就精通了内部存款和储蓄器分配、线程管理、即时优化等等运维态。同样的,Java 调节和测试的本色,就是和虚拟机打交道,通过操作虚拟机来达到观看调节和测试大家本身代码的目标。那一个性子决定了 Java 调试接口和在此以前其余编制程序语言的巨大分歧。

以 C/C++ 的调节为例,近来相比流行的调节和测试工具是 GDB 和微软的 Visual Studio 自带的 debugger,在那种 debugger 中,首先,大家必须编写翻译一个“ debug ”形式的次第,这几个会比实际的 release 形式先后大过多。其次,在调节进度中,debugger 将会深层接入程序的周转,驾驭和控制运转态的片段消息,并将那些音讯及时回到。这种参与对运作的频率和内部存款和储蓄器占用都有早晚的供给。基于那几个须要,那些 Debugger 本人其实是提供了,恐怕说,创制和保管了1个运转态,由此他们的顺序算法相比复杂,个头都相比大。对于远端的调节,GDB 也未有很好的暗中同意达成,当然,C/C++ 在那地点也未曾专门大的需求。

 

 

而 Java 则差别,由于 Java 的运营态已经被虚拟机所很好地保管,因而作为 Java 的 Debugger 无需再自个儿成立1个可控的运维态,而只是须要去操作虚拟机就能够了。 Java 的 JPDA 即是一套为调节和测试和优化服务的虚拟机的操作工具,在那之中,JVMTI 是构成在虚拟机中的接口,JDWP 是叁个通信层,而 JDI 是前者为开发人士准备好的工具和平运动行库。

从构架上说,我们得以把 JPDA 看作成是3个 C/S 种类布局的利用,在那个构架下,我们得以一本万利地由此网络,在任意的地方调节和测试其余一个虚拟机上的次第,那个就很好地化解了布署和测试的难题,尤其满意消除了广大互连网时期中的开发应用的急需。前端和后端的分开,也有利于用户支付适合于本身的调节和测试工具。

从效能上看,由于 Java 程序自身便是编写翻译成字节码,运转在虚拟机上的,由此调节和测试前后的次第、内部存款和储蓄器占用都不会有大变迁(仅仅是开发银行多少个 JDWP 所供给的内部存款和储蓄器),任意档次都可以很好地调节和测试,万分有利。而 JPDA 构架下的多少个组成都部队分,JDWP 和 JDI 都相比小,主要的干活能够让虚拟机本身形成。

从灵活性上,Java 调节和测试工具是成立在强硬的虚拟机上的,由此,很多前沿的行使,比如动态编写翻译运营,字节码的实时替换等等,都得以通过对虚拟机的革新而获取实现。随着虚拟机技术的渐渐前行和深远,种种差异连串,不一样应用领域中虚拟机的出现,各样强大的功用的参与,给我们的调试工具也拉动许多新的施用。

一句话来说,3个天生的,可控的运作态给 Java 的调剂工作,给 Java 调节和测试接口带来了大幅的优势和方便人民群众。通过 JPDA 那几个专业,大家得以从虚拟机中获取大家所须求的音讯,实现大家所愿意的操作,更好地开发大家的次第。

 

7.贰. JPDA 组成模块

JPDA 定义了三个完好独立的系统,它由多个相对独立的层系共同构成,而且规定了它们3者之间的交互格局,或许说定义了它们通讯的接口。这多个层次由低到高分别是 Java 虚拟机工具接口(JVMTI),Java 调节和测试线协议(JDWP)以及 Java 调节和测试接口(JDI)。那八个模块把调节和测试进度分解成多少个很自然的概念:调节和测试者(debugger)和被调节和测试者(debuggee),以及他们中间的通讯器。被调节和测试者运营于大家想调节和测试的 Java 虚拟机之上,它能够通过 JVMTI 那个标准接口,监察和控制当前虚拟机的新闻;调节和测试者定义了用户可选择的调剂接口,通过这几个接口,用户能够对被调剂虚拟机发送调试命令,同时调节和测试者接受并出示调节和测试结果。在调节和测试者和被调剂着之间,调节和测试命令和调节结果,都以经过 JDWP 的通信协议传输的。全部的指令被封装成 JDWP 命令包,通过传输层发送给被调节和测试者,被调节和测试者接收到 JDWP 命令包后,解析那几个命令并转化为 JVMTI 的调用,在被调试者上运营。类似的,JVMTI 的运转结果,被格式化成 JDWP 数据包,发送给调节和测试者并再次回到给 JDI 调用。而调节和测试器开发职员正是经过 JDI 获得数码,发出命令。图 二 出示了那几个历程:

七.二. JPDA 组成模块

JPDA 定义了3个完好独立的体系,它由四个绝对独立的层系共同组成,而且规定了它们三者之间的交互情势,也许说定义了它们通讯的接口。这多少个层次由低到高分别是 Java 虚拟机工具接口(JVMTI),Java 调节和测试线协议(JDWP)以及 Java 调节和测试接口(JDI)。那七个模块把调节和测试进度分解成多少个很自然的概念:调节和测试者(debugger)和被调节和测试者(debuggee),以及他们中间的通讯器。被调节和测试者运维于大家想调节和测试的 Java 虚拟机之上,它能够通过 JVMTI 那些标准接口,监察和控制当前虚拟机的音讯;调节和测试者定义了用户可采取的调节接口,通过这一个接口,用户可以对被调剂虚拟机发送调节和测试命令,同时调试者接受并展现调节和测试结果。在调试者和被调剂着之间,调节和测试命令和调节和测试结果,都以经过 JDWP 的通讯协议传输的。全部的下令被封装成 JDWP 命令包,通过传输层发送给被调节和测试者,被调节和测试者接收到 JDWP 命令包后,解析这几个命令并转账为 JVMTI 的调用,在被调节和测试者上运维。类似的,JVMTI 的运转结果,被格式化成 JDWP 数据包,发送给调节和测试者并赶回给 JDI 调用。而调节和测试器开发人士正是经过 JDI 获得数码,发出命令。图 2 出示了这一个进程:

七.二.一.一.壹. 图 2. JPDA 模块层次

ca88手机版登录网页 2

理所当然,开发人士完全能够不采纳完全的多少个层次,而是根据在那之中的某1个层次开发自个儿的应用。比如你完全可以唯有凭借通过 JVMTI 函数开发三个调剂工具,而不选用 JDWP 和 JDI,只使用自身的广播发表和下令接口。当然,除非是有异乎平日的供给,利用已有的完结会使你一语双关,幸免重复发明轮子。

那多个模块大家会在接二连三作品中分别详细介绍,这里我们简要介绍它们的重点作用:

 

7.2.一.1.一. 图 贰. JPDA 模块层次

理所当然,开发人士完全能够不利用完整的四个层次,而是基于在那之中的某贰个层次开发协调的行使。比如你完全可以唯有凭借通过 JVMTI 函数开发2个调节和测试工具,而不使用 JDWP 和 JDI,只使用本身的通信和指令接口。当然,除非是有相当的需求,利用已有的达成会使你一举两得,防止双重发明轮子。

这多个模块我们会在继续文章中分头详细介绍,那里我们简要介绍它们的最主要功用:

 

7.3. JVMTI 的简介

JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编制程序接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的翻新版本。从那几个 API 的前进历史轨迹中我们就足以明白,JVMTI 提供了可用以 debug 和 profiler 的接口;同时,在 Java 5/陆 中,虚拟机接口也平添了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等成效。正是出于 JVMTI 的强劲功效,它是落实 Java 调节和测试器,以及别的 Java 运行态测试与分析工具的底子。

JVMTI 并不一定在拥有的 Java 虚拟机上都有落到实处,分歧的虚拟机的达成也连镳并驾。然而在有的主流的虚拟机中,比如 Sun 和 IBM,以及一些开源的如 Apache Harmony D宝马7系LVM 中,都提供了行业内部 JVMTI 完成。

JVMTI 是1套本地代码接口,因此使用 JVMTI 须求大家与 C/C++ 以及 JNI 打交道。事实上,开发时1般接纳建立一个 Agent 的点子来使用 JVMTI,它接纳 JVMTI 函数,设置有个别回调函数,并从 Java 虚拟机中赢妥帖前的运维态消息,并作出本身的判定,最后还可能操作虚拟机的运维态。把 Agent 编写翻译成二个动态链接库之后,我们就能够在 Java 程序运转的时候来加载它(运行加载格局),也得以在 Java 5 之后接纳运营时加载(活动加载情势)。

· -agentlib:agent-lib-name=options

· -agentpath:path-to-agent=options

 

 

7.3. JVMTI 的简介

JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编制程序接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本。从那一个 API 的迈入历史轨迹中我们就能够知晓,JVMTI 提供了可用于 debug 和 profiler 的接口;同时,在 Java 5/陆 中,虚拟机接口也加进了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等效果。便是由于 JVMTI 的强大成效,它是贯彻 Java 调节和测试器,以及任何 Java 运行态测试与分析工具的基本功。

JVMTI 并不一定在颇具的 Java 虚拟机上都有落到实处,分歧的虚拟机的落到实处也不完全一样。可是在局地主流的虚拟机中,比如 Sun 和 IBM,以及部分开源的如 Apache Harmony DXC90LVM 中,都提供了正规 JVMTI 完结。

JVMTI 是1套本地代码接口,因而利用 JVMTI 需求咱们与 C/C++ 以及 JNI 打交道。事实上,开发时相似选择建立叁个 Agent 的办法来采用 JVMTI,它利用 JVMTI 函数,设置有个别回调函数,并从 Java 虚拟机中获取当前的运营态音讯,并作出本人的论断,最终还或然操作虚拟机的运营态。把 Agent 编写翻译成一个动态链接库之后,大家就足以在 Java 程序运行的时候来加载它(运行加载格局),也足以在 Java 5 之后采纳运转时加载(活动加载方式)。

· -agentlib:agent-lib-name=options

· -agentpath:path-to-agent=options

 

 

七.4. Agent 的做事进度

7.四. Agent 的办事历程

7.4.1. 启动

Agent 是在 Java 虚拟机运行之时加载的,这些加载处于虚拟机早先化的早期,在这一个小时点上:

· 全部的 Java 类都未被开始化;

· 全部的对象实例都未被创设;

· 由此,未有别的 Java 代码被实践;

但在这一年,我们曾经足以:

· 操作 JVMTI 的 Capability 参数;

· 使用系统参数;

动态库被加载之后,虚拟机会先找找三个 Agent 入口函数:

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)

在这么些函数中,虚拟机传入了2个 JavaVM 指针,以及命令行的参数。通过 JavaVM,我们得以博得 JVMTI 的指针,并收获 JVMTI 函数的施用能力,全体的 JVMTI 函数都由此这么些 jvmtiEnv 获取,不一致的虚拟机达成提供的函数细节或者不平等,然则利用的不2秘籍是联合的。

jvmtiEnv *jvmti; 

(*jvm)->GetEnv(jvm, &jvmti, JVMTI_VERSION_

7.4.1. 启动

Agent 是在 Java 虚拟机运营之时加载的,那么些加载处于虚拟机开首化的初期,在那一个时间点上:

· 全数的 Java 类都未被开头化;

· 全数的对象实例都未被创设;

· 由此,未有任何 Java 代码被实践;

但在那一年,大家早已得以:

· 操作 JVMTI 的 Capability 参数;

· 使用系统参数;

动态库被加载之后,虚拟机会先物色二个 Agent 入口函数:

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)

在那么些函数中,虚拟机传入了3个 JavaVM 指针,以及命令行的参数。通过 JavaVM,我们得以获得 JVMTI 的指针,并拿走 JVMTI 函数的应用能力,全部的 JVMTI 函数都经过那些 jvmtiEnv 获取,分歧的虚拟机达成提供的函数细节大概不等同,不过使用的诀如果统①的。

jvmtiEnv *jvmti; 

(*jvm)->GetEnv(jvm, &jvmti, JVMTI_VERSION_

7.五. JVMTI 基本作用

JVMTI 的效能十一分丰裕,包涵了虚拟机中线程、内存 / 堆 / 栈,类 / 方法 / 变量,事件 / 定时器处理等等 20 多类功用,上面大家介绍一下,并举一些归纳列子。

七.5. JVMTI 基本功效

JVMTI 的效益十分丰裕,蕴含了虚拟机中线程、内部存款和储蓄器 / 堆 / 栈,类 / 方法 / 变量,事件 / 定时器处理等等 20 多类功能,下边我们介绍一下,并举壹些粗略列子。

7.伍.1. 事件处理和回调函数

从上文大家了然,使用 JVMTI 一个主干的法子便是安装回调函数,在好几事件发生的时候接触并作出相应的动作。因而那一局地的效益万分基本,当前版本的 JVMTI 提供了比比皆是事变(伊芙nt)的回调,蕴涵虚拟机起先化、初始运维、截止,类的加载,方法出入,线程始末等等。如若想对那些事件展开处理,大家供给首先为该事件写2个函数,然后在 jvmti伊夫ntCallbacks 这些组织中内定相应的函数指针。比如,大家对线程运营感兴趣,并写了二个 HandleThreadStart 函数,那么大家要求在 Agent_OnLoad 函数里进入:

ca88手机版登录网页, 

柒.5.1. 事件处理和回调函数

从上文我们掌握,使用 JVMTI 二个着力的办法正是安装回调函数,在一些事件时有产生的时候接触并作出相应的动作。因而这1部分的功用十二分基本,当前版本的 JVMTI 提供了众多事件(伊芙nt)的回调,包涵虚拟机起始化、发轫运维、停止,类的加载,方法出入,线程始末等等。假使想对那个事件开始展览拍卖,大家须求首先为该事件写三个函数,然后在 jvmti伊夫ntCallbacks 那个结构中内定相应的函数指针。比如,大家对线程运维感兴趣,并写了2个 HandleThreadStart 函数,那么大家供给在 Agent_OnLoad 函数里参预:

 

7.伍.二. 内部存储器控制和对象得到

内部存款和储蓄器控制是1体运转态的基本作用。 JVMTI 除了提供最简易的内部存款和储蓄器申请和撤回之外(那块内部存款和储蓄器不受 Java 堆管理,开发职员须求活动进行清理工作,不然会造成内部存款和储蓄器泄漏),也提供了对 Java 堆的操作。门到户说,Java 堆中储存了 Java 的类、对象和着力项目(Primitive),通过对堆的操作,开发人士可以很不难的摸索任意的类、对象,甚至足以强行推行垃圾收集工作。 JVMTI 中对 Java 堆的操作非凡,它从不提供几个一向得到的办法(总之,虚拟机对目的的田管并非是哈希表,而是某种树 / 图格局),而是采用三个迭代器(iterater)的主意遍历:

7.5.贰. 内部存款和储蓄器控制和对象获得

内部存款和储蓄器控制是全数运维态的基本功效。 JVMTI 除了提供最简易的内部存款和储蓄器申请和裁撤之外(那块内部存款和储蓄器不受 Java 堆管理,开发人士需求活动实行清理工科作,不然会促成内部存款和储蓄器泄漏),也提供了对 Java 堆的操作。威名赫赫,Java 堆中储存了 Java 的类、对象和主导类型(Primitive),通过对堆的操作,开发人士能够很不难的探寻任意的类、对象,甚至可以强行推行垃圾收集工作。 JVMTI 中对 Java 堆的操作格外,它未有提供贰个直接获得的主意(不问可见,虚拟机对目的的军管并非是哈希表,而是某种树 / 图情势),而是选用一个迭代器(iterater)的章程遍历:

七.5.三. 线程和锁

线程是 Java 运维态中尤其关键的三个部分,在 JVMTI 中也提供了无数 API 进行相应的操作,包涵查询当前线程状态,暂停,苏醒可能极端线程,还是能够对线程锁进行操作。开发者能够拿走一定线程所兼有的锁:

jvmtiError GetOwnedMonitorInfo(jvmtiEnv* env, 

    jthread thread, 

    jint* owned_monitor_count_ptr, 

    jobject** owned_monitors_ptr)

也能够获得当前线程正在等待的锁:

jvmtiError GetCurrentContendedMonitor(jvmtiEnv* env, 

    jthread thread, 

    jobject* monitor_ptr)

 

7.5.三. 线程和锁

线程是 Java 运维态中至极首要的七个片段,在 JVMTI 中也提供了无数 API 进行相应的操作,包含查询当前线程状态,暂停,苏醒也许极端线程,还足以对线程锁进行操作。开发者可以赢得一定线程所享有的锁:

jvmtiError GetOwnedMonitorInfo(jvmtiEnv* env, 

    jthread thread, 

    jint* owned_monitor_count_ptr, 

    jobject** owned_monitors_ptr)

也得以拿走当前线程正在等候的锁:

jvmtiError GetCurrentContendedMonitor(jvmtiEnv* env, 

    jthread thread, 

    jobject* monitor_ptr)

 

柒.⑤.4. 调剂功效

调剂功效是 JVMTI 的基本功用之1,那主要总结了设置断点、调节和测试(step)等,在 JVMTI 里面,设置断点的 API 本人很不难:

jvmtiError SetBreakpoint(jvmtiEnv* env, 

    jmethodID method, 

    jlocation location)

 

柒.⑤.肆. 调节和测试功用

调剂功效是 JVMTI 的基本功效之一,那主要包蕴了设置断点、调节和测试(step)等,在 JVMTI 里面,设置断点的 API 自身很简短:

jvmtiError SetBreakpoint(jvmtiEnv* env, 

    jmethodID method, 

    jlocation location)

 

七.陆. 要害部分

柒.6. 重点部分

7.六.1. Java 虚拟机工具接口(JVMTI)

JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口,它是①套由虚拟机直接提供的 native 接口,它地处整个 JPDA 类其余最底部,全体调节和测试效用本质上都亟待通过 JVMTI 来提供。通过这几个接口,开发人士不仅调节和测试在该虚拟机上运维的 Java 程序,还是能够查看它们运营的情景,设置回调函数,控制有些环境变量,从而优化程序质量。大家理解,JVMTI 的前身是 JVMDI 和 JVMPI,它们原来分别被用来提供调试 Java 程序以及 Java 程序调节质量的法力。在 J二SE 5.0 之后 JDK 取代了 JVMDI 和 JVMPI 那两套接口,JVMDI 在新式的 Java SE 陆 中曾经不提供支持,而 JVMPI 也铺排在 Java SE 7 后被彻底取代。

柒.陆.一. Java 虚拟机工具接口(JVMTI)

JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口,它是一套由虚拟机直接提供的 native 接口,它地处整个 JPDA 种类的最底部,全体调节和测试成效本质上都亟需经过 JVMTI 来提供。通过这一个接口,开发人士不仅调节和测试在该虚拟机上运营的 Java 程序,仍可以查看它们运维的状态,设置回调函数,控制有些环境变量,从而优化程序品质。我们知道,JVMTI 的前身是 JVMDI 和 JVMPI,它们原来分别被用来提供调节和测试 Java 程序以及 Java 程序调节品质的效劳。在 J贰SE 伍.0 之后 JDK 取代了 JVMDI 和 JVMPI 那两套接口,JVMDI 在新型的 Java SE 六 中早已不提供协理,而 JVMPI 也安排在 Java SE 七 后被彻底取代。

柒.陆.二. Java 调节和测试线协议(JDWP)

JDWP(Java Debug Wire Protocol)是一个为 Java 调节和测试而设计的二个简报交互协议,它定义了调节和测试器和被调节和测试程序之间传递的消息的格式。在 JPDA 种类中,作为前端(front-end)的调节和测试者(debugger)进程和后端(back-end)的被调节和测试程序(debuggee)进度之间的相互数据的格式就是由 JDWP 来讲述的,它详细完整地定义了请求命令、回应数据和错误代码,有限协理了前者和后端的 JVMTI 和 JDI 的通讯通畅。比如在 Sun 集团提供的兑现中,它提供了二个名称叫 jdwp.dll(jdwp.so)的动态链接库文件,那么些动态库文件贯彻了贰个 Agent,它会负担解析前端发出的乞求可能命令,并将其转化为 JVMTI 调用,然后将 JVMTI 函数的再次回到值封装成 JDWP 数据发还给后端。

除此以外,那里要求专注的是 JDWP 本人并不包蕴传输层的落到实处,传输层须要独自完成,不过 JDWP 包蕴了和传输层交互的残暴的概念,正是说,JDWP 磋商即使不鲜明大家是透过 EMS 如故快递运输商品的,不过它规定了大家传递的货物的布阵的方法。在 Sun 企业提供的 JDK 中,在传输层上,它提供了 socket 情势,以及在 Windows 上的 shared memory 格局。当然,传输层自身只是正是本机内经过间通讯格局和远端通讯格局,用户有趣味也能够按 JDWP 的规范自个儿完毕。

7.陆.2. Java 调节和测试线协议(JDWP)

JDWP(Java Debug Wire Protocol)是一个为 Java 调节和测试而设计的一个简报交互协议,它定义了调节和测试器和被调试程序之间传递的音信的格式。在 JPDA 种类中,作为前端(front-end)的调节和测试者(debugger)进度和后端(back-end)的被调试程序(debuggee)进度之间的并行数据的格式正是由 JDWP 来叙述的,它详细完整地定义了请求命令、回应数据和错误代码,保障了前者和后端的 JVMTI 和 JDI 的通讯通畅。比如在 Sun 公司提供的兑现中,它提供了多个名称叫 jdwp.dll(jdwp.so)的动态链接库文件,这些动态库文件落到实处了三个 Agent,它会顶住解析前端发出的央求或许命令,并将其转化为 JVMTI 调用,然后将 JVMTI 函数的重回值封装成 JDWP 数据发还给后端。

除此以外,那里需求专注的是 JDWP 自身并不包含传输层的完结,传输层须求独自达成,可是 JDWP 包罗了和传输层交互的从严的概念,正是说,JDWP 合计虽然不鲜明大家是因而 EMS 依然快递运输商品的,不过它规定了我们传递的货物的摆放的法子。在 Sun 公司提供的 JDK 中,在传输层上,它提供了 socket 格局,以及在 Windows 上的 shared memory 格局。当然,传输层本身只是就是本机内经过间通讯格局和远端通讯格局,用户有趣味也足以按 JDWP 的标准自个儿完结。

七.6.3. Java 调节和测试接口(JDI)

JDI(Java Debug Interface)是三个模块中最高层的接口,在超越5玖%的 JDK 中,它是由 Java 语言达成的。 JDI 由针对前者定义的接口组成,通过它,调节和测试工具开发职员就能通过前端虚拟机上的调节和测试器来远程操控后端虚拟机上被调节和测试程序的运维,JDI 不仅能支援开发职员格式化 JDWP 数据,而且还是能为 JDWP 数据传输提供队列、缓存等优化服务。从理论上说,开发职员只需使用 JDWP 和 JVMTI 即可扶助跨平台的长途调节和测试,可是平昔编写 JDWP 程序费时进退维谷,而且作用不高。因而依照 Java 的 JDI 层的引入,简化了操作,升高了开发职员开发调节和测试程序的频率。

表 一 计算了四个模块的不相同点:

七.陆.三. Java 调节和测试接口(JDI)

JDI(Java Debug Interface)是多少个模块中最高层的接口,在大部的 JDK 中,它是由 Java 语言完结的。 JDI 由针对前者定义的接口组成,通过它,调节和测试工具开发人士就能经过前端虚拟机上的调试器来远程操控后端虚拟机上被调节和测试程序的运作,JDI 不仅能辅助开发职员格式化 JDWP 数据,而且还是能为 JDWP 数据传输提供队列、缓存等优化服务。从理论上说,开发职员只需利用 JDWP 和 JVMTI 即可补助跨平台的中远距离调节和测试,可是一向编写 JDWP 程序费时吃力,而且效能不高。由此依照 Java 的 JDI 层的引入,简化了操作,进步了开发人士开发调节和测试程序的功用。

表 一 总结了三个模块的差异点:

柒.6.三.一.一. 表 一. JPDA 层次比较

 

模块

层次

编程语言

作用

JVMTI

底层

C

获取及控制当前虚拟机状态

JDWP

中介层

C

定义 JVMTI 和 JDI 交互的数据格式

JDI

高层

Java

提供 Java API 来远程控制被调试虚拟机

 

 

柒.陆.三.①.1. 表 一. JPDA 层次比较

模块

层次

编程语言

作用

JVMTI

底层

C

获取及控制当前虚拟机状态

JDWP

中介层

C

定义 JVMTI 和 JDI 交互的数据格式

JDI

高层

Java

提供 Java API 来远程控制被调试虚拟机

 

捌. 找到源码

   this.m_jTotalEuros = new JLabel();

    this.m_jLblTotalEuros1 = new JLabel();

this.m_jSubtotalEuros = new JLabel();

 

 

参考

长远 Java 调节和测试种类,第 二 片段  JVMTI 和 Agent 达成.htm

JVMTI开发教程之叁个大约的Agent – 飞鸟Blog – 博客频道 – CSDN.NET.htm

JVM的动态agent机制 在main函数运转未来运维agent – CSDN博客.htm

JVM源码分析之javaagent原理完全解读.htm

 

8. 找到源码

   this.m_jTotalEuros = new JLabel();

    this.m_jLblTotalEuros1 = new JLabel();

this.m_jSubtotalEuros = new JLabel();

 

 

参考

深深 Java 调节和测试类别,第 贰 有的  JVMTI 和 Agent 实现.htm

JVMTI开发教程之贰个简约的Agent – 飞鸟Blog – 博客频道 – CSDN.NET.htm

JVM的动态agent机制 在main函数运行以往运维agent – CSDN博客.htm

JVM源码分析之javaagent原理完全解读.htm

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图