一种基于高阶函数的C++过程间异常分析系统及方法技术方案

技术编号:33885524 阅读:15 留言:0更新日期:2022-06-22 17:18
本发明专利技术公开了函数式编程和程序分析技术领域的一种基于高阶函数的C++过程间异常分析系统及方法,包括:确定过程调用图中每个被调用子过程的分析顺序,将C++程序中的语句进行分类;收集各个被调用子过程异常相关语句和函数调用语句的集合约束,按照集合约束规则对集合约束进行求解,获取过程内异常分析信息后,通过高阶函数的形式将所有被调用子过程的异常分析结果保存为异常分析函数摘要;按照函数的参数传递方式,根据形参和实参对应参数信息,在过程调用点处,对高阶函数式异常分析函数摘要的参数集合信息进行相应代入。本发明专利技术降低了传统方法需要构建过程间异常控制流图对异常进行过程间分析的时空开销,解决了异常分析效率较低的问题。析效率较低的问题。析效率较低的问题。

【技术实现步骤摘要】
一种基于高阶函数的C++过程间异常分析系统及方法


[0001]本专利技术涉及一种基于高阶函数的C++过程间异常分析系统及方法,属于函数式编程和程序分析


技术介绍

[0002]随着软件规模的不断增大,人们对软件质量的要求越来越高,为了提高软件系统的健壮性,对程序中的异常进行快速有效的分析变得越来越重要。传统的过程间异常分析关注的主要问题是在发生过程调用的情况下如何快速找到与抛出异常相匹配的异常处理程序,排查出程序中真正未捕获的异常,将其相关信息进行反馈(如异常的唯一标识,异常名,未捕获异常的传播路径)。目前主流的过程间异常分析方法大多是在过程间异常控制流图的基础上进行遍历,获取过程间的异常相关信息。这类方法虽然能够将异常的信息在图上直观地表现出来,但是软件系统复杂性的提高使得构建过程间异常控制流图的时空开销非常大。
[0003]集合约束方法通过收集特定问题的相关集合约束信息,并按照一定的约束求解规则对约束进行求解,达到对特定问题进行分析的目的。本专利技术对异常相关集合约束进行收集,借助于函数式编程中高阶函数的特性——函数可以作为参数和返回值,提供一种基于高阶函数的过程间异常分析方法,以解决传统方法异常分析效率较低的问题。

技术实现思路

[0004]本专利技术的目的在于克服现有技术中的不足,提供一种基于高阶函数的C++ 过程间异常分析系统及方法,降低了传统方法需要构建过程间异常控制流图对异常进行过程间分析的时空开销,解决了异常分析效率较低的问题。
[0005]为达到上述目的,本专利技术是采用下述技术方案实现的:
[0006]第一方面,本专利技术提供了一种基于高阶函数的C++过程间异常分析方法,包括:
[0007]确定过程调用图中每个被调用子过程的分析顺序,将C++程序中的语句进行分类;
[0008]收集各个被调用子过程异常相关语句和函数调用语句的集合约束,按照集合约束规则对集合约束进行求解,获取过程内异常分析信息后,通过高阶函数的形式将所有被调用子过程的异常分析结果保存为异常分析函数摘要;
[0009]按照函数的参数传递方式,根据形参和实参对应参数信息,在过程调用点处,对高阶函数式异常分析函数摘要的参数集合信息进行相应代入,从而将过程内的异常分析信息传递至过程间过程调用点处,获取过程间异常分析结果。
[0010]进一步的,确定过程调用图中每个被调用子过程的分析顺序,将C++程序中的语句进行分类,包括:
[0011]构建C++程序的过程调用图;
[0012]按照逆拓扑排序顺序遍历过程调用图,确定被调用子过程的分析顺序;
[0013]将程序中的语句分为异常相关的语句、过程调用语句和普通语句后,为每条语句
设定一个用来跟踪未捕获异常的传播路径标签。
[0014]进一步的,收集各个被调用子过程异常相关语句和函数调用语句的集合约束,按照集合约束规则对集合约束进行求解,获取过程内异常分析信息后,通过高阶函数的形式将所有被调用子过程的异常分析结果保存为异常分析函数摘要,包括:
[0015]步骤2

1)按序选取一个待分析的子过程,初始化所述待分析子过程的集合约束,包括throw语句、try

catch处理结构、过程调用语句的异常相关集合约束;
[0016]步骤2

2)对所述待分析的子过程的第i条throw e
i
语句收集异常相关集合约束,其中e
i
为throw语句的子表达式。
[0017]步骤2

3)对所述待分析的子过程中第i个try

catch处理结构收集异常相关集合约束;
[0018]步骤2

4)对所述待分析的子过程中的第i条过程调用语句收集异常相关集合约束;
[0019]步骤2

5)判断异常相关语句和过程调用语句的集合约束是否收集完成,包括:
[0020]当异常相关语句和过程调用语句的集合约束未收集完成时,根据步骤2

2) 至步骤2

4)迭代地更新所述待分析的子过程中收集到的每条throw语句、 try

catch处理结构、过程调用语句的集合约束后,再次执行步骤2

5);
[0021]当所有异常相关语句和过程调用语句的集合约束都收集完成时,按照相应的集合约束规则对集合约束进行求解,获取完整的过程内异常分析结果,使用高阶函数的形式存储,生成高阶函数形式的异常分析函数摘要。
[0022]进一步的,按照函数的参数传递方式,根据形参和实参对应参数信息,在过程调用点处,对高阶函数式的异常分析函数摘要的参数集合信息进行相应代入,从而将过程内的异常分析信息传递至过程间过程调用点处,获取过程间异常分析结果,包括:
[0023]步骤3

1)收集被调用过程异常相关语句和过程调用语句的异常相关集合约束,按照相应集合约束规则进行集合约束求解,获取所述被调用过程的异常分析结果,将其表示为高阶函数式异常分析函数摘要;
[0024]步骤3

2)按照函数的参数传递方式,在函数调用点处根据形参和实参之间对应参数信息对高阶函数式异常分析函数摘要中的函数参数二元组集合进行相应代入,从而将所述被调用过程的异常分析信息传递至过程调用点处,获取到调用过程的过程间异常分析结果;
[0025]步骤3

3)判断所有被调用子过程的异常分析结果是否传递至相应过程调用点处,包括:
[0026]当所有被调用子过程的异常分析结果未全部传递至相应过程调用点处时,根据步骤3

1)至步骤3

2)迭代地更新程序中所有过程调用点的异常分析信息后,再次执行步骤3

3);
[0027]当所有被调用子过程的异常分析结果已全部传递至相应过程调用点处时,获取完整的过程间异常分析结果。
[0028]进一步的,通过高阶函数的形式将所有被调用子过程的过程内异常分析信息保存为函数摘要信息为:
[0029]λx.({<ExId
i
,ExName
i
,[label
i
]>}∪{<TypeX
i
,NameX
i
>})
[0030]其中,x表示过程P形参对应的初始符号化函数参数二元组集合,{<ExId
i
, ExName
i
,[label
i
]>}表示过程内未捕获异常的相关信息,[label
i
]表示未捕获异常的传播路径,label
i
表示每条语句对应的标签,集合{<TypeX
i
,NameX
i
&g本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于高阶函数的C++过程间异常分析方法,其特征是,包括:确定过程调用图中每个被调用子过程的分析顺序,将C++程序中的语句进行分类;收集各个被调用子过程异常相关语句和函数调用语句的集合约束,按照集合约束规则对集合约束进行求解,获取过程内异常分析信息后,通过高阶函数的形式将所有被调用子过程的异常分析结果保存为异常分析函数摘要;按照函数的参数传递方式,根据形参和实参对应参数信息,在过程调用点处,对高阶函数式异常分析函数摘要的参数集合信息进行相应代入,从而将过程内的异常分析信息传递至过程间过程调用点处,获取过程间异常分析结果。2.根据权利要求1所述的基于高阶函数的C++过程间异常分析方法,其特征是,确定过程调用图中每个被调用子过程的分析顺序,将C++程序中的语句进行分类,包括:构建C++程序的过程调用图;按照逆拓扑排序顺序遍历过程调用图,确定被调用子过程的分析顺序;将程序中的语句分为异常相关的语句、过程调用语句和普通语句后,为每条语句设定一个用来跟踪未捕获异常的传播路径标签。3.根据权利要求1所述的基于高阶函数的C++过程间异常分析方法,其特征是,收集各个被调用子过程异常相关语句和函数调用语句的集合约束,按照集合约束规则对集合约束进行求解,获取过程内异常分析信息后,通过高阶函数的形式将所有被调用子过程的异常分析结果保存为异常分析函数摘要,包括:步骤2

1)按序选取一个待分析的子过程,初始化所述待分析子过程的集合约束,包括throw语句、try

catch处理结构、过程调用语句的异常相关集合约束;步骤2

2)对所述待分析的子过程的第i条throw e
i
语句收集异常相关集合约束,其中e
i
为throw语句的子表达式。步骤2

3)对所述待分析的子过程中第i个try

catch处理结构收集异常相关集合约束;步骤2

4)对所述待分析的子过程中的第i条过程调用语句收集异常相关集合约束;步骤2

5)判断异常相关语句和过程调用语句的集合约束是否收集完成,包括:当异常相关语句和过程调用语句的集合约束未收集完成时,根据步骤2

2)至步骤2

4)迭代地更新所述待分析的子过程中收集到的每条throw语句、try

catch处理结构、过程调用语句的集合约束后,再次执行步骤2

5);当所有异常相关语句和过程调用语句的集合约束都收集完成时,按照相应的集合约束规则对集合约束进行求解,获取完整的过程内异常分析结果,使用高阶函数的形式存储,生成高阶函数形式的异常分析函数摘要。4.根据权利要求1所述的基于高阶函数的C++过程间异常分析方法,其特征是,按照函数的参数传递方式,根据形参和实参对应参数信息,在过程调用点处,对高阶函数式的异常分析函数摘要的参数集合信息进行相应代入,从而将过程内的异常分析信息传递至过程间过程调用点处,获取过程间异常分析结果,包括:步骤3

1)收集被调用过程异常相关语句和过程调用语句的异常相关集合约束,按照相应集合约束规则进行...

【专利技术属性】
技术研发人员:张迎周葛丽丽帅东昕密杰杨嘉毅卢跃许碧欢
申请(专利权)人:南京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1