调剂种类

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

 

壹. Swing Inspector是1个Java Swing/AWT用户分界面分析和调整工具,作用与firebug类似,二

2. 类似spylite ,firebug3

3. Eclipse  vm param3

四. Cltr+f1二突显主分界面三

5. Ctrl+鼠标找到控件3

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

六.壹. Java 调节和测试接口的特点四

6.二. JPDA 组成模块伍

6.3. JVMTI 的简介6

陆.肆. Agent 的办事进度七

6.4.1. 启动7

六.5. JVMTI 基本功效7

六.5.1. 事件处理和回调函数七

陆.五.2. 内部存款和储蓄器调节和对象得到8

陆.五.三. 线程和锁八

六.5.四. 调控功效9

六.6. 人命关天部分9

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

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

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

七. 找到源码10

 

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

怀有强有力的Swing/AWT用户分界面分析和调节和测试相关功效。 适用于从java swing初级到高等的有着开拓职员,能够飞速定位难题,UI火速调节和测试,分析别的软件分界面的贯彻原理,能够给开采工效带来大幅升高。

特点:

1. 具有UI组件联动功用,在用户界面中Ctrl+移动鼠标(Mac OSX ⌘+F1贰),能够在Swing Inspector主分界面中显示对应组件消息,并高亮当前Component。

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

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

四. 有力的window捕获功效,可以捕获加载agent的jvm创制的全数Swing/AWT窗口(网页中的applet,浏览器加载appet/webstart后开行的console窗口),情势对话框等。

5. 青蓝,无需安装,只需给java命令增加一行参数,就可以运维Swing Inspector。

陆. 帮助具备的AWT/Swing程序,netbeans、visualvm等。

7. 强有力的表明式协理,允许对选定组进实施表明式运算,实时突显总计结果,运算结果支持属性浏览和编写制定。

八. 有力的Javascript支持效率,支持用javascript实时修改用户分界面中的组件,执行脚本后即刻生效。

9. 高品质,大旨职能应用c/c++达成,直接垄断jvm,对品质影响十分小,主分界面接纳lazy机制,刷新组件时只更新可知viewer。属性编辑器可一贯改造选定的零件属性,且直接生效。

十. 足以记录组件增加到parent时的stacktrace,能够高速稳固到相应的代码行。

11. 简易易用,神速键与常用软件一致(F五刷新、Alt+Left后退,Alt+Right前进等),界面相当简短、直观,未有读书费用。

1贰. 无偿,为软件行当前行尽1份力量是大家的宏旨

 

 

小编:: 老哇的爪子 Attilax 艾龙,  EMAIL:14665一玖八二玖@qq.com

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

 

2. 类似spylite ,firebug

3. Eclipse  vm param

 

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

肆. Cltr+f1二出示主分界面

 

五. 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方法,是上边的1个子集) 

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

 

 

七.一. Java 调节和测试接口的性状

Java 语言是率先个利用虚拟机概念的风行的编制程序语言,正是因为虚拟机的存在,使广大作业变得简单而轻巧,明白了虚拟机,就调节了内存分配、线程管理、即时优化等等运营态。一样的,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 是一个通信层,而 JDI 是前者为开辟人士准备好的工具和平运动行库。

从构架上说,大家得以把 JPDA 看作成是3个 C/S 连串布局的施用,在那么些构架下,我们能够便宜地经过互联网,在随机的地点调节和测试其它2个虚拟机上的次序,那么些就很好地化解了配置和测试的难点,尤其满意消除了点不清网络时代中的开垦应用的需求。前端和后端的分手,也利于用户支出适合于本身的调剂工具。

从成效上看,由于 Java 程序自个儿正是编译成字节码,运转在虚拟机上的,由此调节和测试前后的次第、内部存款和储蓄器占用都不会有大转换(仅仅是运行多个 JDWP 所须要的内部存款和储蓄器),任意档次都足以很好地调节和测试,11分便利。而 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 拿到数码,发出命令。图 2 展现了那些进度:

7.二.一.1.一. 图 2. JPDA 模块层次

本来,开采人士完全能够不应用完全的多少个层次,而是依据在那之中的某二个层次开辟自个儿的应用。比如你完全可以只有正视通过 JVMTI 函数开荒1个调节和测试工具,而不选用 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 虚拟机上都有落到实处,分歧的虚拟机的完结也不尽一样。不过在1些主流的虚拟机中,比如 Sun 和 IBM,以及一些开源的如 Apache Harmony D锐界LVM 中,都提供了规范 JVMTI 达成。

JVMTI 是一套本地代码接口,由此使用 JVMTI 须求大家与 C/C++ 以及 JNI 打交道。事实上,开采时相似选拔建立一个 Agent 的章程来使用 JVMTI,它应用 JVMTI 函数,设置有个别回调函数,并从 Java 虚拟机中获取当前的运营态音信,并作出自身的论断,最终还大概操作虚拟机的运营态。把 Agent 编写翻译成三个动态链接库之后,我们就足以在 Java 程序运营的时候来加载它(运维加载形式),也得以在 Java 伍 之后采纳运营时加载(活动加载形式)。

· -agentlib:agent-lib-name=options

· -agentpath:path-to-agent=options

 

 

七.4. Agent 的做事历程

7.4.1. 启动

Agent 是在 Java 虚拟机运营之时加载的,那一个加载处于虚拟机早先化的最初,在那一个小时点上:

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

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

· 因此,未有其余 Java 代码被奉行;

但在这年,大家曾经得以:

· 操作 JVMTI 的 Capability 参数;

· 使用系统参数;

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

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

在这么些函数中,虚拟机传入了1个 JavaVM 指针,以及命令行的参数。通过 JavaVM,大家得以得到 JVMTI 的指针,并取得 JVMTI 函数的利用手艺,全部的 JVMTI 函数都经过那么些 jvmtiEnv 获取,区别的虚拟机达成提供的函数细节可能不等同,不过利用的艺术是联合的。

jvmtiEnv *jvmti; 

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

7.5. JVMTI 基本功用

JVMTI 的职能分外丰盛,包涵了虚拟机中线程、内部存款和储蓄器 / 堆 / 栈,类 / 方法 / 变量,事件 / 定期器处理等等 20 多类效率,上面我们介绍一下,并举壹些总结列子。

七.5.一. 事件处理和回调函数

从上文我们明白,使用 JVMTI 2个着力的艺术就是设置回调函数,在有些事件发生的时候接触并作出相应的动作。因而这一片段的功效尤其基本,当前版本的 JVMTI 提供了点不清轩然大波(伊芙nt)的回调,包蕴虚拟机伊始化、初叶运营、停止,类的加载,方法出入,线程始末等等。要是想对那么些事件开展拍卖,我们需求首先为该事件写叁个函数,然后在 jvmti伊芙ntCallbacks 那么些布局中内定相应的函数指针。比如,大家对线程运行感兴趣,并写了贰个 HandleThreadStart 函数,那么大家要求在 Agent_OnLoad 函数里加入:

 

七.五.贰. 内部存款和储蓄器调控和目的获得

内部存款和储蓄器调整是全数运营态的基本成效。 JVMTI 除了提供最简便易行的内存申请和收回之外(那块内部存款和储蓄器不受 Java 堆管理,开拓人士须求活动开始展览清监护人业,否则会导致内部存款和储蓄器泄漏),也提供了对 Java 堆的操作。人所共知,Java 堆中存款和储蓄了 Java 的类、对象和宗旨项目(Primitive),通过对堆的操作,开垦人士能够很轻巧的物色任意的类、对象,甚至足以强行实践垃圾搜集工作。 JVMTI 中对 Java 堆的操作特别,它并未有提供三个一贯获得的法子(显而易见,虚拟机对指标的管理并非是哈希表,而是某种树 / 图格局),而是接纳一个迭代器(iterater)的主意遍历:

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)

 

7.5.肆. 调剂功效

调剂功效是 JVMTI 的基本成效之1,那至关心爱抚要包蕴了安装断点、调节和测试(step)等,在 JVMTI 里面,设置断点的 API 自个儿相当粗略:

jvmtiError SetBreakpoint(jvmtiEnv* env, 

    jmethodID method, 

    jlocation location)

 

7.陆. 第二部分

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

JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口,它是壹套由虚拟机直接提供的 native 接口,它地处整个 JPDA 类别的最底部,全部调节和测试功能本质上都亟需经过 JVMTI 来提供。通过那些接口,开垦人员不仅调节和测试在该虚拟机上运维的 Java 程序,还是能够查看它们运转的状态,设置回调函数,调节有些环境变量,从而优化程序质量。大家掌握,JVMTI 的前身是 JVMDI 和 JVMPI,它们原来分别被用于提供调节和测试 Java 程序以及 Java 程序调控质量的效果。在 J2SE 五.0 之后 JDK 替代了 JVMDI 和 JVMPI 那两套接口,JVMDI 在新型的 Java SE 六 中曾经不提供支持,而 JVMPI 也安排在 Java SE 七 后被透顶替代。

七.六.2. Java 调节和测试线协议(JDWP)

JDWP(Java Debug Wire Protocol)是三个为 Java 调试而布置的三个报道交互协议,它定义了调节和测试器和被调节和测试程序之间传递的音讯的格式。在 JPDA 种类中,作为前端(front-end)的调节和测试者(debugger)进程和后端(back-end)的被调节和测试程序(debuggee)进度之间的相互数据的格式正是由 JDWP 来叙述的,它详细完整地定义了请求命令、回应数据和错误代码,保障了前者和后端的 JVMTI 和 JDI 的通讯通畅。比如在 Sun 公司提供的贯彻中,它提供了3个名叫 jdwp.dll(jdwp.so)的动态链接库文件,那几个动态库文件贯彻了2个 Agent,它会负担解析前端发出的乞请或许命令,并将其转化为 JVMTI 调用,然后将 JVMTI 函数的重临值封装成 JDWP 数据发还给后端。

其它,那里需求小心的是 JDWP 本人并不包含传输层的落实,传输层供给单独完毕,不过 JDWP 包含了和传输层交互的严格的概念,就是说,JDWP 共同商议就算不鲜明大家是透过 EMS 依然特快专递运输商品的,不过它规定了大家传递的货品的布置的主意。在 Sun 公司提供的 JDK 中,在传输层上,它提供了 socket 格局,以及在 Windows 上的 shared memory 方式。当然,传输层本人只是正是本机内经过间通讯方式和远端通讯格局,用户风乐趣也能够按 JDWP 的正规化自身达成。

柒.陆.叁. Java 调节和测试接口(JDI)

JDI(Java Debug Interface)是多个模块中最高层的接口,在大部的 JDK 中,它是由 Java 语言达成的。 JDI 由针对前者定义的接口组成,通过它,调节和测试工具开垦职员就能透过前端虚拟机上的调节和测试器来远程操控后端虚拟机上被调节和测试程序的周转,JDI 不仅能帮助开荒人士格式化 JDWP 数据,而且仍可感到 JDWP 数据传输提供队列、缓存等优化服务。从理论上说,开荒职员只需选取 JDWP 和 JVMTI 就可以辅助跨平台的长距离调试,不过一向编写 JDWP 程序费时步履维艰,而且作用不高。由此依据 Java 的 JDI 层的引进,简化了操作,升高了开垦职员开拓调节和测试程序的频率。

表 1 总结了四个模块的不一致点:

七.陆.3.一.壹. 表 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注