调护医治种类

Atitit.获取swing ui 按键控件的id 与名字 与JPDA 调试种类

 

1. Swing Inspector是三个Java Swing/AWT客商分界面分析和调整工具,作用与firebug类似,2

2. 类似spylite ,firebug3

3. Eclipse  vm param3

4. Cltr+f12出示主分界面3

5. Ctrl+鼠标找到控件3

6. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测量检验体系布局的缩写。4

6.1. Java 调节和测量试验接口的特色4

6.2. JPDA 组成模块5

6.3. JVMTI 的简介6

6.4. Agent 的做事历程7

6.4.1. 启动7

6.5. JVMTI 基本作用7

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

6.5.2. 内存调控和指标得到8

6.5.3. 线程和锁8

6.5.4. 调节和测量检验功效9

6.6. 重超越二分之一9

6.6.1. Java 虚构机工具接口(JVMTI)9

6.6.2. Java 调节和测量试验线左券(JDWP)9

6.6.3. Java 调试接口(JDI)10

7. 找到源码10

 

1. Swing Inspector是一个Java Swing/AWT顾客界面深入分析和调解工具,成效与firebug类似,

不无强有力的Swing/AWT顾客分界面解析和调弄整理相关功效。 适用于从java swing初级到高等的保有开垦人士,能够飞速定位难题,UI火速调节和测验,分析别的软件分界面包车型大巴落实原理,能够给开垦工作效用带来大幅度晋级。

特点:

1. 具有UI组件联合浮动效能,在顾客分界面中Ctrl+移动鼠标(Mac OSX ⌘+F12),能够在Swing Inspector主分界面中彰显对应组件音讯,并高亮当前Component。

2. 得以在Swing Inspector组件树中联合浮动到客商分界面,即双向联合浮动,且无需提供分界面包车型地铁源代码。

3. Applet扶助,可以固定嵌入到另外网页中的applet分界面。

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

5. 土色,不必要安装,只需给java命令增添活龙活现行反革命参数,就可以运转Swing Inspector。

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

7. 刚劲的表明式帮助,允许对选定组进实行表明式运算,实时展现计算结果,运算结果辅助属性浏览和编排。

8. 强盛的Javascript扶植功效,帮忙用javascript实时修改客户界面中的组件,实践脚本后迅即生效。

9. 高质量,主题成效使用c/c++完毕,间接垄断jvm,对性能影响一点都不大,主分界面选拔lazy机制,刷新组件时只更新可知viewer。属性编辑器可平素修改选定的零部件属性,且一向生效。

10. 方可记下组件添加到parent时的stacktrace,能够高速稳固到相应的代码行。

11. 简单易行易用,急迅键与常用软件黄金时代致(F5刷新、Alt+Left后退,Alt+Right前行等),界面特别简洁、直观,未有读书开销。

12. 无偿,为软件产业前进尽意气风发份力量是大家的主题

 

 

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

转发请注脚来源: http://www.cnblogs.com/attilax/

 

2. 类似spylite ,firebug

3. Eclipse  vm param

 

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

4. Cltr+f12出示主分界面

 

5. Ctrl+鼠标找到控件

 

 

图片 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

 

 

6. javaagent的器重功用如下:

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

· 能够在运行期对已加载类的字节码做改动,可是这种情状下会有大多的限量,前边会详细说 

· 还应该有其余一些小众的意义 

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

o 获取具备曾经先导化过的类(实施过clinit方法,是地点的三个子集) 

o 获取某些对象的大小 

o 将有些jar参加到bootstrap classpath里作为高优先级被bootstrapClassloader加载 

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

o 设置某个native方法的前缀,首要在搜寻native方法的时候做法则相配 

 

 

7. JPDA(Java Platform Debugger Architecture)是 Java 平台调节和测量检验类别布局的缩写。

通过 JPDA 提供的 API,开采人士能够低价灵活的搭建 Java 调节和测量检验应用程序。 JPDA 主要由多个部分构成:Java 虚拟机工具接口(JVMTI)、Java 调节和测验线协议(JDWP),以至 Java 调试接口(JDI)。

 

 

7.1. Java 调试接口的特点

Java 语言是率先个应用虚构机概念的风行的编制程序语言,便是因为虚构机的存在,使大多职业变得轻松而轻易,精通了虚构机,就驾驭了内部存款和储蓄器分配、线程管理、即时优化等等运维态。一样的,Java 调试的本来面目,就是和虚构机打交道,通过操作设想机来达到旁观调节和测验大家温馨代码的目标。那几个性子决定了 Java 调节和测量检验接口和从前别的编程语言的庞大不相同。

以 C/C++ 的调节和测量试验为例,这段日子可比盛行的调治将养工具是 GDB 和微软的 Visual Studio 自带的 debugger,在此种 debugger 中,首先,大家必得编写翻译多个“ debug ”情势的程序,那么些会比其实的 release 形式前后相继大过多。其次,在调节和测量检验进度中,debugger 将会深层接入程序的运维,驾驭和操纵运营态的有个别消息,并将这么些音信马上赶回。这种参与对运维的功用和内部存款和储蓄器占用都有自然的急需。基于这几个供给,那个 Debugger 自个儿其实是提供了,可能说,创立和管理了三个运营态,由此他们的前后相继算法相比较复杂,个头都相当大。对于远端的调试,GDB 也远非很好的默许达成,当然,C/C++ 在此方面也未曾极度大的必要。

 

 

而 Java 则差别,由于 Java 的运维态已经被虚构机所很好地保管,由此作为 Java 的 Debugger 没有供给再本身创制三个可控的运行态,而单独供给去操作虚构机就可以了。 Java 的 JPDA 便是后生可畏套为调节和测量检验和优化服务的虚构机的操作工具,个中,JVMTI 是结合在虚构机中的接口,JDWP 是三个通信层,而 JDI 是后者为开发人士计划好的工具和运维库。

从构架上说,大家可以把 JPDA 看作成是三个 C/S 体系布局的选拔,在这里个构架下,大家能够平价地经过互联网,在随心所欲的地点调试别的二个设想机上的主次,这么些就很好地化解了安插和测量试验的主题材料,特别满足化解了累累网络时期中的开拓应用的急需。前端和后端的抽离,也会有扶持顾客支付相符于本身的调护医治工具。

从功效上看,由于 Java 程序自己正是编写翻译成字节码,运营在虚构机上的,由此调节和测验前后的次序、内部存款和储蓄器占用都不会有大转移(仅仅是开发银行二个 JDWP 所需求的内部存储器),任性等级次序都能够很好地调试,极其常有助于。而 JPDA 构架下的多少个组成部分,JDWP 和 JDI 都十分小,首要的干活得以让虚构机自个儿姣好。

从灵活性上,Java 调节和测量试验工具是创制在强大的设想机上的,由此,比很多前方的应用,举例动态编写翻译运维,字节码的实时替换等等,都得以透过对设想机的考订而收获贯彻。随着虚构机技能的日趋前进和浓厚,各个不相同连串,分化应用领域中虚构机的产出,各个强盛的意义的走入,给大家的调节和测量检验工具也带来非常多新的选取。

同理可得,三个原始的,可控的运维态给 Java 的调整职业,给 Java 调节和测验接口带来了大而无当的优势和便利。通过 JPDA 这么些正式,大家可以从设想机中收获我们所急需的音讯,完毕大家所企盼的操作,更加好地付出大家的程序。

 

7.2. JPDA 组成模块

JPDA 定义了两个整机独立的系统,它由八个相对独立的层系共同整合,并且规定了它们三者之间的交互格局,只怕说定义了它们通讯的接口。那多少个档期的顺序由低到高分别是 Java 虚构机工具接口(JVMTI),Java 调节和测验线协议(JDWP)以致 Java 调节和测量检验接口(JDI)。那多少个模块把调节和测验进度分解成多少个很自然的概念:调节和测量试验者(debugger)和被调节和测验者(debuggee),以致他们中间的通讯器。被调试者运维于大家想调节和测量试验的 Java 设想机之上,它能够通过 JVMTI 那几个标准接口,监察和控制当前设想机的消息;调节和测量检验者定义了客商可利用的调理接口,通过那一个接口,客商可以对被调弄整理虚构机发送调节和测量试验命令,同一时候调节和测量检验者接纳并出示调节和测量检验结果。在调节和测量检验者和被调理着之间,调节和测量试验命令和疗养结果,都以经过 JDWP 的简报公约传输的。全部的授命被封装成 JDWP 命令包,通过传输层发送给被调节和测量试验者,被调节和测验者采取到 JDWP 命令包后,深入分析这几个命令并转载为 JVMTI 的调用,在被调节和测量试验者上运转。类似的,JVMTI 的运作结果,被格式化成 JDWP 数据包,发送给调节和测量试验者并回到给 JDI 调用。而调节和测量试验器开垦职员就是经过 JDI 获得数码,发出命令。图 2 出示了这几个历程:

7.2.1.1.1. 图 2. JPDA 模块档期的顺序

图片 2

当然,开拓人士完全能够不利用完整的八个档次,而是基于在这之中的某一个档期的顺序开荒和煦的利用。比方你完全能够只是依靠通过 JVMTI 函数开荒二个调节和测验工具,而不使用 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/6 中,虚构机接口也大增了监听(Monitoring),线程分析(Thread analysis)以致覆盖率深入分析(Coverage Analysis)等效用。就是由于 JVMTI 的强硬功效,它是贯彻 Java 调试器,以至别的 Java 运营态测验与深入分析工具的根基。

JVMTI 并不一定在具备的 Java 虚构机上都有落实,差别的设想机的贯彻也不尽同样。不过在一些主流的设想机中,比方 Sun 和 IBM,以致部分开源的如 Apache Harmony DCRUISERLVM 中,都提供了专门的学业 JVMTI 落成。

JVMTI 是生气勃勃套本地代码接口,因而使用 JVMTI 供给大家与 C/C++ 以至 JNI 打交道。事实上,开拓时日常接受建构叁个 Agent 的艺术来使用 JVMTI,它应用 JVMTI 函数,设置有些回调函数,并从 Java 设想机中获得当前的运行态音讯,并作出自身的论断,末了还恐怕操作设想机的运转态。把 Agent 编写翻译成二个动态链接库之后,大家就能够在 Java 程序运营的时候来加载它(运营加载情势),也足以在 Java 5 之后采用运转时加载(活动加载形式)。

· -agentlib:agent-lib-name=options

· -agentpath:path-to-agent=options

 

 

7.4. Agent 的干活历程

7.4.1. 启动

Agent 是在 Java 设想机运维之时加载的,那些加载处于虚构机开头化的最先,在此个时间点上:

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

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

· 因此,未有任何 Java 代码被实施;

但在此个时候,我们早已足以:

· 操作 JVMTI 的 Capability 参数;

· 使用系统参数;

动态库被加载之后,设想机遇先找找三个 Agent 入口函数:

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

在这里个函数中,设想机传入了四个 JavaVM 指针,以至命令行的参数。通过 JavaVM,大家得以获得 JVMTI 的指针,并获取 JVMTI 函数的利用力量,全体的 JVMTI 函数都通过这些 jvmtiEnv 获取,分裂的虚构机完结提供的函数细节可能不相同等,不过采纳的章程是联合的。

jvmtiEnv *jvmti; 

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

7.5. JVMTI 基本功能

JVMTI 的职能特别足够,包涵了虚构机中线程、内部存款和储蓄器 / 堆 / 栈,类 / 方法 / 变量,事件 / 沙漏管理等等 20 多类成效,上边大家介绍一下,并举一些大致列子。

7.5.1. 事件管理和回调函数

从上文大家驾驭,使用 JVMTI 几当中坚的秘籍正是安装回调函数,在好几事件产生的时候接触并作出相应的动作。因而那意气风发部分的职能极度基本,当前版本的 JVMTI 提供了不菲风云(伊夫nt)的回调,包蕴设想机开端化、开头运转、结束,类的加载,方法出入,线程源委等等。尽管想对那么些事件进行拍卖,我们需求首先为该事件写贰个函数,然后在 jvmtiEventCallbacks 那些协会中钦赐相应的函数指针。例如,大家对线程运行感兴趣,并写了三个 HandleThreadStart 函数,那么我们须求在 Agent_OnLoad 函数里投入:

 

7.5.2. 内部存款和储蓄器调整和对象获得

内部存款和储蓄器调节是任何运维态的基本功效。 JVMTI 除了提供最简易的内部存款和储蓄器申请和收回之外(那块内部存款和储蓄器不受 Java 堆管理,开荒人士要求活动实行清理专门的学业,不然会促成内部存款和储蓄器泄漏),也提供了对 Java 堆的操作。深入人心,Java 堆中积存了 Java 的类、对象和大旨项目(Primitive),通过对堆的操作,开采人士可以相当轻巧的探求狂妄的类、对象,以至足以强行试行垃圾搜集工作。 JVMTI 中对 Java 堆的操作特别,它未有提供三个平昔获得的措施(同理可得,设想机对指标的管理并不是是哈希表,而是某种树 / 图格局),而是采用二个迭代器(iterater)的不二等秘书籍遍历:

7.5.3. 线程和锁

线程是 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.4. 调治将养作用

调整功用是 JVMTI 的基本功效之新生事物正在蒸蒸日上,这关键回顾了安装断点、调节和测验(step)等,在 JVMTI 里面,设置断点的 API 自个儿很粗大略:

jvmtiError SetBreakpoint(jvmtiEnv* env, 

    jmethodID method, 

    jlocation location)

 

7.6. 器重部分

7.6.1. Java 虚构机工具接口(JVMTI)

JVMTI(Java Virtual Machine Tool Interface)即指 Java 设想机工具接口,它是黄金时代套由设想机直接提供的 native 接口,它地处整个 JPDA 类别的最尾部,全数调节和测量试验功能本质上都亟需经过 JVMTI 来提供。通过那一个接口,开辟职员不止调节和测量试验在该虚构机上运维的 Java 程序,仍可以够查看它们运营的景色,设置回调函数,控制有个别情形变量,进而优化程序品质。大家驾驭,JVMTI 的前身是 JVMDI 和 JVMPI,它们原本分别被用来提供调节和测量检验 Java 程序以至 Java 程序调整品质的效劳。在 J2SE 5.0 之后 JDK 替代了 JVMDI 和 JVMPI 这两套接口,JVMDI 在新式的 Java SE 6 中已经不提供扶持,而 JVMPI 也安排在 Java SE 7 后被深透取代。

7.6.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 的正规化自身达成。

7.6.3. Java 调节和测验接口(JDI)

JDI(Java Debug Interface)是四个模块中最高层的接口,在大部的 JDK 中,它是由 Java 语言实现的。 JDI 由针对前面贰个定义的接口组成,通过它,调节和测量检验工具开垦职员就能够透过前端虚构机上的调节和测量检验器来远程操控后端虚构机上被调试程序的周转,JDI 不只好帮忙开辟职员格式化 JDWP 数据,况兼仍可认为 JDWP 数据传输提供队列、缓存等优化服务。从理论上说,开荒职员只需选择 JDWP 和 JVMTI 就可以协理跨平台的长间隔调节和测量试验,然而从来编写 JDWP 程序费时吃力,何况功能不高。由此依赖 Java 的 JDI 层的引进,简化了操作,提升了开辟职员开荒调节和测量检验程序的频率。

表 1 总结了七个模块的不相同点:

7.6.3.1.1. 表 1. JPDA 档期的顺序比较

 

模块

层次

编程语言

作用

JVMTI

底层

C

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

JDWP

中介层

C

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

JDI

高层

Java

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

 

 

8. 找到源码

   this.m_jTotalEuros = new JLabel();

    this.m_jLblTotalEuros1 = new JLabel();

this.m_jSubtotalEuros = new JLabel();

 

 

参考

浓厚 Java 调节和测量试验种类,第 2 有个别  JVMTI 和 Agent 完成.htm

JVMTI开荒教程之三个简便的Agent – 飞鸟Blog – 博客频道 – CSDN.NET.htm

JVM的动态agent机制 在main函数运维之后运营agent – CSDN博客.htm

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