[发明专利]一种调试时代码动态更新方法有效
| 申请号: | 201410656737.9 | 申请日: | 2014-11-18 |
| 公开(公告)号: | CN104391717B | 公开(公告)日: | 2017-09-12 |
| 发明(设计)人: | 张同宝;顾天晓;马晓星 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F9/445 | 分类号: | G06F9/445 |
| 代理公司: | 南京钟山专利代理有限公司32252 | 代理人: | 戴朝荣 |
| 地址: | 210046 江苏*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 调试 时代 动态 更新 方法 | ||
1.一种调试时代码动态更新方法,其特征在于,包括以下步骤 :
步骤一、软件开发者使用调试器调试代码;
步骤二、软件开发者在调试时更改代码并保存,触发准备更新过程,包括代码检测,生成迁移器模板类,完成对迁移器模板类的修改,将更新信息传入虚拟机中;
步骤三、调试器请求虚拟机完成代码更新;
步骤二中所述准备更新过程的具体步骤是:
21)软件开发者使用调试器对程序进行调试,通过设断点进行单步调试;
22)调试器监听调试时代码发生改变的事件,当代码发生改变时,响应代码改变的事件,再通过检测获取当前调试代码类文件所在位置,获取更改代码之后的类文件以及更改之前的类文件,将新旧代码类文件存放到临时文夹中;
23)编译存放于临时文件夹中的新旧代码类文件,得到对应新旧代码类文件的字节码文件;
24)通过比较新旧代码的字节码文件得到更新说明文件,进而得到更新类型信息;
25)判断是否需要迁移器来完成代码更新,
当不需要时转入步骤26),否则转入27);
26)判断代码更新不需要迁移器,完成代码更新过程;
27)判断代码更新需要迁移器,生成一个迁移器模板;
28)软件开发者修改迁移器模板类中的代码并保存, 编译修改后的迁移器模板类 ;
29)通知调试器完成对迁移器模板类的修改,更新根据迁移器模板类生成的迁移器类,将迁移器类传入虚拟机。
2.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,步骤24)中,所述新旧版本字节码文件的比较包括:方法体的变化、类的方法增加或删除、类域的增加或删除、 类结构的变化。
3.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,步骤27)中,所述迁移器模板包括下述组成部分:
401、定义的域,一个模板类重定义了新类的所有域,使得在模板的方法中可以自由访问要迁移的对象的各个域;
402、对象迁移方法,为实例方法,用以访问旧类对象的域;
403、类迁移方法,为静态方法,用以在更新后对类的第一次访问中被调用,实现更新静态域;
404、父类,当所述父类发生更新时,模板类将声明该父类。
4.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于:所述步骤28)中,软件开发者根据前后代码的不同来修改迁移器的模板类文件,保存修改后的迁移器模板类,编译迁移器模板类得到迁移器模板类的字节码文件。
5.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,所述步骤29)的具体步骤包括:
29-1)通过迁移器模板类生成迁移器类,将多个模板类合并成一个迁移器类;
29-2)将合并后的迁移器类所在的位置信息通过消息发送到虚拟机,虚拟机端接收迁移器类,完成更新的准备工作。
6.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,所述步骤三的具体步骤包括:
31)调试器在更新准备工作完成后,调用JVMTI中的RedefineClasses接口用修改后的类替换原始的类,首先在堆中找到旧类,找到后悬挂正在执行的程序,通知类加载器加载新类的修改后的版本,通过调用迁移类中对应的迁移方法来实现对该类实例的更新;
32)通过调用JVMTI提供的PopFrame接口使JVM重新执行被修改的方法,恢复现场。
7.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,所述调试器的调试代码为Java代码。
8.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于,步骤21)中,所述单步调试的调试命令包括设断点、单步执行、条件执行、监视对象或者监视堆栈。
9.根据权利要求1所述的一种调试时代码动态更新方法,其特征在于:所述虚拟机为Javelus。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410656737.9/1.html,转载请声明来源钻瓜专利网。





