Atitit.获取swing ui 开关控件的id 与名字 与JPDA 调节和测验体系

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:1466519849@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 DKoleosLVM 中,都提供了正规化 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

 

相关文章