【技术实现步骤摘要】
一种基于搜索的编译器优化序列故障定位方法
本专利技术属于软件编译领域,涉及一种用于定位编译器优化序列故障的技术,具体为一种基于搜索的编译器优化序列故障定位方法。
技术介绍
编译器是整个软件开发过程中不可或缺的重要基础软件,其不仅将开发者用高级编程语言编写的程序转换为计算机可识别的机器码,而且要负责在编译过程中对目标程序进行优化,以最大限度地发挥目标程序的性能。随着编译技术的发展,现代编译器拥有了大量的代码优化技术。用户在使用编译器编译程序时,一般会使用多个优化组合成一条优化序列对目标程序进行优化。然而,编译器作为一种软件,也不可避免地会出现故障。特别是编译器优化更容易产生故障,各种优化之间可能存在相互影响,一种优化技术优化后的程序,可能使其他优化发挥更好的效果,也可能使其他优化失效,甚至出现故障。但是,当编译器开发者对编译器故障进行修复时,由于编译器自身规模较大,使得修复编译器故障较为耗时,尤其是编译优化序列相关的故障。因此,为帮助编译器开发者快速分析与修复编译器优化序列故障,确保编译器质量,编译器优化序列故障的自动定位就显得至关重要。编译器优化序列故障自动定位是提升编译器开发者分析编译器优化序列故障效率的重要途径,其不仅能自动化地完成对编译器优化序列故障的分析,而且也能准确地报告优化序列故障出现的位置。然而,由于现代编译器中优化技术众多,使得分析与定位编译器优化序列故障复杂且耗时。虽然已有一些编译器故障定位技术的专利技术专利,但这些已有的专利技术专利面对编译器优化序列故障定位问题,仍存在适配困难、效率低等困 ...
【技术保护点】
1.一种基于搜索的编译器优化序列故障定位方法,其特征在于,步骤如下:/n步骤1:编译故障编译器,获取优化集合;/n使用插桩的方式编译故障编译器C,并获取编译优化信息,构成优化集合O;/n步骤2:获取触发编译器优化序列故障的程序p和优化序列s;/n步骤3:获取故障时编译器的代码覆盖信息;/n使用编译器C在优化序列s的作用下编译程序p,并获取编译器C执行过程中的代码覆盖信息t
【技术特征摘要】
1.一种基于搜索的编译器优化序列故障定位方法,其特征在于,步骤如下:
步骤1:编译故障编译器,获取优化集合;
使用插桩的方式编译故障编译器C,并获取编译优化信息,构成优化集合O;
步骤2:获取触发编译器优化序列故障的程序p和优化序列s;
步骤3:获取故障时编译器的代码覆盖信息;
使用编译器C在优化序列s的作用下编译程序p,并获取编译器C执行过程中的代码覆盖信息ts;其中代码覆盖信息包括编译器执行时所涉及的文件以及文件中被执行的代码语句;
步骤4:搜索无故障优化序列;
将编译器C,优化集合O,程序p和故障优化序列s,以及代码覆盖信息ts作为搜索算法的输入,利用搜索算法自动地寻找包含故障优化序列s中的所有优化,但不会触发故障的优化序列;若搜索算法得到的无故障的优化序列集合为S={s1,s2,…,sn},则其对应的编译器C执行过程中的代码覆盖信息集合为T={t1,t2,…,tn};
步骤5:计算文件可疑度;
首先,根据ts和T,计算故障发生时,编译器所执行的各条代码语句的可疑度;然后将文件中所有被执行代码语句的平均可疑度作为该文件的可疑度;
其中,代码语句的可疑度计算公式如下:
efl和nfl分别表示执行与不执行代码语句l的故障优化序列数,而epl则表示执行代码语句l的无故障优化序列数;由于仅考虑故障发生时,编译器所执行的代码语句,所以efl和nfl分别1和0;因此代码语句的可疑度计算公式简化为:
对于ts中各个文件的被执行代码语句,其epl通过遍历T计算得到;
文件可疑度的具体计算公式如下:
其中,nf为文件f中被执行代码语句的数量,li为第i条被执行的代码语句l;
步骤6:报告可疑文件;
根据步骤5计算得到的文件可疑度,对故障发生时,编译器涉及到的源码文件进行排序,可疑度越大越靠前;然后将排序后的文件列表报告给编译器开发者,作为优化序列故障可能出现的位置。
2.根据权利要求1所述的一种基于搜索的编译器优化序列故障定位方法,其特征在于,在步骤4中,所述的搜索算法的步骤如下:
步骤a:初始化种群;
采用随机的方式生成个体,即从优化集合O中随机选择k个优化构成一条优化序列;初始化过程中,k值可为大于故障优化序...
【专利技术属性】
技术研发人员:周志德,江贺,任志磊,高国军,
申请(专利权)人:大连理工大学,
类型:发明
国别省市:辽宁;21
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。