一种Java字节码调试器及调试方法与流程

文档序号:11950031阅读:来源:国知局

技术特征:

1.一种Java字节码调试器,其特征在于,包括符号库模块、缓存模块、调试模块、栈解析模块和引用解析模块,其中:

符号库模块,用于从Java源代码文件中获取符号信息,并存放符号信息;

缓存模块,用于从Java字节码文件中获取符号信息和数据信息,并缓存符号信息和数据信息;

调试模块,用于通过Keil通道与虚拟机连接,使得Java字节码文件可在虚拟机上运行并调试,其中,用户直接在Java字节码上设置断点,调试模块将该断点同步到Keil通道进行调试,调试结束后,调试模块通过Keil通道将运行到断点位置的虚拟机的存储器中的Java栈提取出来发送到栈解析模块;

栈解析模块,用于接收运行到断点位置的虚拟机的存储器中的Java栈,并对Java栈进行解析,其中,解析结果包括执行到断点位置时应用程序对应的Java函数的调用关系、函数参数信息、函数局部变量值和地址信息中的至少一个;

引用解析模块,用于对执行到断点位置时Java字节码对应的Java引用进行解析,其中,如果Java引用指向一个Java对象,根据Java对象的存储方式和规则进行解析,解析出这个Java对象所属的Java类别及其对应的状态、拥有者和域值中的至少一个;如果Java引用指向一个数组,则解析出这个数组元素的类型和所有元素的值。

2.如权利要求1所述的一种Java字节码调试器,其特征在于,还包括静态变量解析模块,用于对Java字节码中的静态变量进行解析,并允许开发者在任意时刻选择任意一个静态变量进行解析和查看。

3.一种Java字节码调试方法,其特征在于,包括:

步骤S1、从Java源代码文件中提取字符信息,创建字符库模块;

步骤S2、从Java字节码文件中提取符号信息和数据值,建立缓存模块;

步骤S3、在Keil μVision集成开发环境中,配置Keil通道使其分别与Java字节码调试器的调试模块和虚拟机建立通信连接;

步骤S4、用户直接在Java字节码上设置断点,该断点被同步到Keil通道来执行调试动作;

步骤S5、调试结束后,Keil通道将运行到断点位置的虚拟机的存储器中对应的Java栈整个提取出来发送到栈解析模块;

步骤S6、栈解析模块接收执行到断点位置的虚拟机的存储器中对应的Java栈,通过访问和加载缓存模块中符号信息和数据信息来对Java栈进行解析;

步骤S7、引用解析模块通过访问和加载缓存模块中符号信息和数据信息来对执行到断点位置的Java字节码对应的Java引用进行解析;

步骤S8、用户通过步骤S6的解析结果和步骤S7的解析结果对执行到当前断点的Java字节码中的函数信息、变量信息及引用对象进行查看。

4.如权利要求3所述的Java字节码调试方法,其特征在于,步骤S1中以方法为单位对从Java源代码文件中获取的符号信息进行组织,生成符号文件来创建字符库模块;其中,符号文件的文件名与Java字节码文件中的方法全名相对应,符号文件的文件名依次包括包名、类名、方法名、参数编码和返回值编码;符号文件的内容包括方法的源代码起始行号、方法体的起始行号、方法体的终止行号、所有函数的参数信息和所有函数的局部变量信息。

5.如权利要求3所述的Java字节码调试方法,其特征在于,步骤S2采用四级缓存的方式对从Java字节码文件中提取符号信息和数据值进行缓存,四级缓存从上到下依次为系统缓存、包缓存、类缓存和方法缓存。

6.如权利要求3所述的Java字节码调试方法,其特征在于,步骤S4中的调试动作包括单步执行、跳进执行、跳出执行和执行到光标处中的至少一个。

7.如权利要求3所述的Java字节码调试方法,其特征在于,还包括在步骤S4和S5之间的Java字节码调试器对虚拟机中的存储器进行存储访问的步骤,该步骤中,通过将执行存储访问任务所需要的函数信息和Keil通道信息以DLL文件统一到虚拟机代码体系,再由Java字节码调试器对其进行调用来实现;其中,DLL文件由GNU makefile平台调用VC编译器和链接器,对实现存储访问任务所需要的文件进行编译和链接来生成;实现存储访问任务所需要的文件包括:Keil工程中定义的除.c或.h文件中定义的宏之外的其他宏的.mak文件、Keil工程中定义的所有包含路径的.mak文件、Keil工程中Java字节码调试器需要的.c文件的.mak文件、屏蔽Keil工程中有而VC环境不支持的关键字的.h文件、定义对虚拟机中的存储器进行寻址和存储访问的.c文件、定义计算Java数组或Java对象大小的.c文件和定义所有被Java字节码调试器调用的函数、全局变量或宏等的.c文件。

8.如权利要求5所述的Java字节码调试方法,其特征在于,步骤S6中对缓存模块的访问和加载过程包括:

当用户对系统缓存进行首次访问时,加载并生成所有的包对象;

当用户对每个包缓存进行首次访问时,加载该包中类库的所有内容,包括所有类的类信息和所有方法的方法信息;

当用户对每个类对象进行首次访问时,由类组件从类库获取并生成该类对象所属包内的所有类对象;

当用户对每个方法对象进行首次访问时,由方法组件从类库获取并生成该方法对象所属包内的所有方法对象。

9.如权利要求3所述的Java字节码调试方法,其特征在于,还包括:用户根据调试返回的信息在Java字节码文件中进行关键字搜索的步骤,以对导致程序运行异常的函数参数或局部变量等信息进行修改和确认,该步骤以包为单位进行关键字的搜索任务,当需要对某个包中的方法进行首次搜索时,先扫描整个Java字节码文件,将Java字节码文件中与该包相关的信息提取到一个缓存中,再从该缓存对该包进行搜索,搜索结果被显示在列表框中,双击即可将光标定位到Java字节码文件中相应的行。

10.如权利要求3或9所述的Java字节码调试方法,其特征在于,还包括:在Java字节码文件和Java源代码文件之间进行双向定位的步骤。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1