[发明专利]一种调试时代码动态更新方法有效
| 申请号: | 201410656737.9 | 申请日: | 2014-11-18 |
| 公开(公告)号: | CN104391717B | 公开(公告)日: | 2017-09-12 |
| 发明(设计)人: | 张同宝;顾天晓;马晓星 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F9/445 | 分类号: | G06F9/445 |
| 代理公司: | 南京钟山专利代理有限公司32252 | 代理人: | 戴朝荣 |
| 地址: | 210046 江苏*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 调试 时代 动态 更新 方法 | ||
技术领域
本发明公开了一种调试时代码动态更新方法,属于软件调试技术领域。
背景技术
软件调试是重现软件故障、定位故障根源,并最终解决软件问题的过程。调试器是用来提供调试功能的软件或硬件工具。在软件开发的过程中,调试技术是必不可少的技术,一般来说主要的调试命令包括:设定断点,单步执行,观测对象和观测堆栈信息,对于调试器的熟练使用会大大提高软件的开发效率。
当调试一个项目代码时,单步执行到错误点时,需要修改代码,修改的代码可能是各种各样的类型,这时候如果想继续调试代码,传统的方法是要重启项目,然后再单步执行到上一次调试现场,这会消耗很多时间以及增加很多重复的操作,使得软件开发的效率降低。
动态更新是从旧的版本更新到新版本的过程。图3是JavaEmailServer从1.3.1版本到1.3.2版本的更新实例,可以从图3中版本a和版本b看出三类变化:第一,是loadUser方法体的变化,第二,是setForwardedAddresses方法的参数发生了变化,第三是User类的域forwardAddresses从String []变化到EmailAddress[]。在这三种变化中,对于第三种类的域发生改变的更新类型,当更新类的实例时,一般的做法是将新类中的新增加的域初始化为系统默认的初值(比如整型初始化为0,引用初始化为null)。在这个例子中,如果User实例采用系统默认值的更新,新版本的域forwardAddresses就会被初始化为null,但是从新旧版本的对比中可以看出如果要保持更新前后实例的正确,需要将String[]类型转化为EmailAddress[]类型,这时候就需要使用迁移函数,将User实例中的String[]的forwardAddresses转换为新EmailAddress[]类型。从这个例子可以看出,对于一些更新类型,为了保证代码更新的正确性,必须提供特定的迁移器来完成更新。
现有技术中常用的调试软件包括以下几种:
1)Hotswap:虚拟机本身也支持简单的代码更新,从JDK1.4版本开始存在的调试时动态更新的方法,被称为Hotswap功能,这个功能的局限性在于只支持调试时刻对方法体的改变的更新,这样的更新在调试时是远远不够的,并不能满足所有的更新类型。
2)DCE VM:能支持任意更新的类型,但是在更新的时候,只提供默认的迁移器,也就是在对象更新的时候将新增的域初始化为系统默认的初值,从上面对图3的例子可以看出这样的更新是不正确的,缺少提供迁移器来供软件开发者参与修改,从而保证更新的正确性。
3)JRebel:一个商业的软件,官方文档没有具体说明具体的支持的动态更新机制,只是说明JRebel不是从JVM本身出发,而是监控类的字节码文件,通过字节码文件和类加载器来完成更新,不支持通过修改JVM来实现代码的更新。
发明内容
本发明所要解决的技术问题是:针对现有技术的缺陷,提供一种调试时代码动态更新方法,具体是提供一种代码在线更新的方法,使得被更新的程序不需要重新启动即可更新代码,同时提供了对于特定更新类型所需要的迁移器,保证代码更新的正确性。
本发明为解决上述技术问题采用以下技术方案:
一种调试时代码动态更新方法,包括以下步骤:
步骤一、软件开发者使用调试器调试代码;
步骤二、软件开发者在调试时更改代码并保存,触发准备更新过程,包括代码检测,生成迁移器模板类,完成迁移器模板类的修改,将更新信息传入虚拟机中;
步骤三、调试器请求虚拟机完成代码更新。
作为本发明的进一步优选方案,步骤二中所述准备更新过程的具体步骤是:
21)软件开发者使用调试器对程序进行调试,通过设断点进行单步调试;
22)调试器监听调试时代码发生改变的事件,当代码发生改变时,响应代码改变的事件,再通过检测获取当前调试代码类文件所在位置,获取更改代码之后的类文件以及更改之前的类文件,将新旧代码类文件存放到临时文夹中;
23)编译存放于临时文件夹中的新旧代码类文件,得到对应新旧代码类文件的字节码文件;
24)通过比较新旧代码的字节码文件得到更新说明文件,进而得到更新类型信息;
25)判断是否需要迁移器来完成代码更新,
当不需要时转入步骤26),否则转入27);
26)判断代码更新不需要迁移器,完成代码更新过程;
27)判断代码更新需要迁移器,生成一个迁移器模板;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410656737.9/2.html,转载请声明来源钻瓜专利网。





