System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及软件安全,特别是涉及一种死锁修复系统、方法和计算机设备。
技术介绍
1、随着计算机软件技术的发展,并发程序正广泛应用于软件系统的开发过程中。由于其内在的并发性、线程调度的不确定性和代码规模的庞大,并发程序易于遭遇并发缺陷。并发缺陷通常会导致程序或系统陷入一种不确定的运行状态,甚至带来系统崩溃等严重问题。而死锁是一种发生频率较高的并发缺陷,且难以被有效地修复,不正确的修复方法有很大的风险引入死锁。因此,对死锁修复的研究已经成为近年来学术界和工业界的热点问题。
2、在软件开发过程中,java5的java.util.concurrent中提供了synchronized的替代方案可重入锁(reentrantlock)来处理并发程序中的内存访问冲突。在使用reentrantlock时,开发人员应及时释放之前获取的锁,并且在正确的程序路径中释放锁。如果开发人员忘记释放锁或不能正确释放锁,其他线程将一直处于等待状态并且永远不会获得锁,甚至导致死锁。
3、目前,已有许多自动化死锁修复的工作不断被提出。如《grail: context-awarefixing of concurrency bugs》,grail采用petri-net分析来消除这种引入的死锁,但它只能修复由两个线程引发的死锁,普适性不高。也用一些工作在此基础上提出改进,避免修复引入新的死锁。如文献《fixing deadlocks via lock pre-acquisitions》,通过预获取锁来修复死锁,它专注于打破hold-and-wait条
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种死锁修复系统、方法和计算机设备,能够准确修复由可重入锁引起的死锁。
2、第一方面,本申请提供了一种死锁修复系统,在其中一个实施例中,所述系统包括:
3、构建修复模板模块,用于根据由可重入锁引发的死锁的特征,构建修复模板;
4、构建抽象语法树模块,用于构建待测程序的抽象语法树;
5、检测死锁模块,用于定位所述待测程序的共享数据,按照所述共享数据在所述待测程序中的位置从所述抽象语法树中提取抽象语法子树,在所述抽象语法子树中搜索锁定语句和解锁语句,并根据搜索结果确定待修复抽象语法子树;
6、修复死锁模块,用于采用与所述待修复抽象语法子树匹配的修复模板对所述待修复抽象语法子树进行修复,并根据修复后的抽象语法子树重构出修复程序,得到所述待测程序的修复结果。
7、在其中一个实施例中,所述构建修复模板模块还用于:
8、获取类型为缺陷且状态为已解决、已修复和已关闭的缺陷报告,作为候选缺陷报告;
9、以死锁和可重入锁为筛选关键词,从所述候选缺陷报告中筛选出目标缺陷报告;
10、提取所述目标缺陷报告对应的补丁文件;
11、基于所述补丁文件的特征,构建所述修复模板。
12、在其中一个实施例中,所述检测死锁模块还用于:
13、从所述抽象语法子树的根节点开始,从上到下进行遍历,搜索各个修复模板中的关键节点,并从搜索出的关键节点中搜索名为锁定语句的第一方法调用节点和名为解锁语句的第二方法调用节点;
14、将所述第一方法调用节点存储在第一列表中,将所述第二方法调用节点存储在第二列表中;
15、遍历所述第一列表,获取所述第一列表中每个节点中的锁对象的类型,并从所述第一列表中删除锁对象的类型不是可重入锁的第一方法调用节点;
16、若所述抽象语法子树为顺序结构或者循环结构,则比较所述第一列表中第一方法调用节点的数量和所述第二列表中第二方法调用节点的数量,并在第一方法调用节点的数量和所述第二列表中第二方法调用节点的数量不同的情况下,将所述抽象语法子树确定为待修复抽象语法子树;
17、若所述抽象语法子树为分支结构,则检查每个分支是否含所述第二方法调用节点,若存在不含所述第二方法调用节点的分支,则将所述抽象语法子树确定为待修复抽象语法子树。
18、在其中一个实施例中,所述修复死锁模块还用于:
19、采用第一键值对指示锁对象和所述第一方法调用节点,其中,所述锁对象的名称为键,所述第一方法调用节点的编号为值;
20、采用第二键值对指示锁对象和所述第二方法调用节点,其中,所述锁对象的名称为键,所述第二方法调用节点的编号为值;
21、若所述待修复抽象语法子树为顺序结构或者循环结构,则遍历所述第一键值对和所述第二键值对,若同一个锁对象的名称对应的第一方法调用节点的编号与第二方法调用节点的编号不同,则按照匹配的修复模板在所述待修复抽象语法子树中添加所述第二方法调用节点;
22、若所述待修复抽象语法子树为分支结构,则在缺少所述第二方法调用节点的分支末尾按照匹配的修复模板添加所述第二方法调用节点。
23、在其中一个实施例中,所述修复死锁模块还用于:
24、若同一个锁对象的名称对应的第一方法调用节点的编号与第二方法调用节点的编号相同,则检查所述第二方法调用节点的位置,并基于所述位置确定匹配的修复模板,并按照匹配的修复模板进行修复。
25、第二方面,本申请提供了一种死锁修复方法,在其中一个实施例中,所述方法包括:
26、根据由可重入锁引发的死锁的特征,构建修复模板;
27、构建待测程序的抽象语法树;
28、定位所述待测程序的共享数据,按照所述共享数据在所述待测程序中的位置从所述抽象语法树中提取抽象语法子树,在所述抽象语法子树中搜索锁定语句和解锁语句,并根据搜索结果确定待修复抽象语法子树;
29、采用与所述待修复抽象语法子树匹配的修复模板对所述待修复抽象语法子树进行修复,并根据修复后的抽象语法子树重构出修复程序,得到所述待测程序的修复结果。
30、在其中一个实施例中,所述根据由可重入锁引发的死锁的特征,构建修复模板,包括:
31、获取类型为缺陷且状态为已解决、已修复和已关闭的缺陷报告,作为候选缺陷报告;
32、以死锁和可重入锁为筛选关键词,从所述候选缺陷报告中筛选出目标缺陷报告;
33、提取所述目标缺陷报告对应的补丁文件;
34、基于所述补丁文件的特征,构建所述修复模板。
35、在其中一个实施例中,所述在所述抽象语法子树中搜索锁定语句和解锁语句,并根据搜索结果确定待修复抽象语法子树,包括:
36、从所述抽象语法子树的根节点开始,从上到下进行遍历,搜索各个修复模板中的关键节点,并从搜索出的关键节点中搜索名为锁定语句的第一方法调用节点和名为解锁语句的第二方法调用节点;
37、将所述第一方法调用节点存储在第一列表中,将所述第二方法调用节点存储在本文档来自技高网...
【技术保护点】
1.一种死锁修复系统,其特征在于,所述系统包括:
2.根据权利要求1所述系统,其特征在于,所述构建修复模板模块还用于:
3.根据权利要求1所述的系统,其特征在于,所述检测死锁模块还用于:
4.根据权利要求3所述的系统,其特征在于,所述修复死锁模块还用于:
5.根据权利要求4所述的系统,其特征在于,所述修复死锁模块还用于:
6.一种死锁修复方法,其特征在于,所述方法包括:
7.根据权利要求6所述方法,其特征在于,所述根据由可重入锁引发的死锁的特征,构建修复模板,包括:
8.根据权利要求6所述的方法,其特征在于,所述在所述抽象语法子树中搜索锁定语句和解锁语句,并根据搜索结果确定待修复抽象语法子树,包括:
9.根据权利要求8所述的方法,其特征在于,所述采用与所述待修复抽象语法子树匹配的修复模板对所述待修复抽象语法子树进行修复,包括:
10.根据权利要求9所述的方法,其特征在于,所述采用与所述待修复抽象语法子树匹配的修复模板对所述待修复抽象语法子树进行修复,还包括:
1
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求6至10中任一项所述的方法的步骤。
13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求6至10中任一项所述的方法的步骤。
...【技术特征摘要】
1.一种死锁修复系统,其特征在于,所述系统包括:
2.根据权利要求1所述系统,其特征在于,所述构建修复模板模块还用于:
3.根据权利要求1所述的系统,其特征在于,所述检测死锁模块还用于:
4.根据权利要求3所述的系统,其特征在于,所述修复死锁模块还用于:
5.根据权利要求4所述的系统,其特征在于,所述修复死锁模块还用于:
6.一种死锁修复方法,其特征在于,所述方法包括:
7.根据权利要求6所述方法,其特征在于,所述根据由可重入锁引发的死锁的特征,构建修复模板,包括:
8.根据权利要求6所述的方法,其特征在于,所述在所述抽象语法子树中搜索锁定语句和解锁语句,并根据搜索结果确定待修复抽象语法子树,包括:
9.根据权利要求8...
【专利技术属性】
技术研发人员:袁砚池,
申请(专利权)人:中国工商银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。