CN100442243C - 一种对编译器中的错误进行自动定位的方法 - Google Patents

一种对编译器中的错误进行自动定位的方法 Download PDF

Info

Publication number
CN100442243C
CN100442243C CNB2005100900932A CN200510090093A CN100442243C CN 100442243 C CN100442243 C CN 100442243C CN B2005100900932 A CNB2005100900932 A CN B2005100900932A CN 200510090093 A CN200510090093 A CN 200510090093A CN 100442243 C CN100442243 C CN 100442243C
Authority
CN
China
Prior art keywords
file
value
function
option
compiler
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB2005100900932A
Other languages
English (en)
Other versions
CN1912848A (zh
Inventor
吕方
张军超
连瑞琦
吴承勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dongguan Lianzhou Electronic Technology Co Ltd
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CNB2005100900932A priority Critical patent/CN100442243C/zh
Publication of CN1912848A publication Critical patent/CN1912848A/zh
Application granted granted Critical
Publication of CN100442243C publication Critical patent/CN100442243C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种对编译器中的错误进行自动定位的方法,包括:编译器编译应用程序的源文件,得到应用程序的目标文件集合;定位应用程序中出错的目标文件;从所得到的出错目标文件中定位出错函数;从所得到的出错函数中定位可能引起错误的优化阶段,减小错误所在区域的查找范围,得到最初导致错误的优化阶段和编译器导致错误的优化开关选项。本发明的优点在于:实现了对目标文件中的最初错误阶段的快速定位和错误优化开关选项的快速查找,有利于技术人员对后续分析工作的实现,减少了分析所占用的时间。

Description

一种对编译器中的错误进行自动定位的方法
技术领域
本发明涉及编译器的开发与调试,特别适用于使用大型应用程序或基准测试程序包对编译器软件进行健壮性、正确性测试的过程。
背景技术
在编译器的研制开发过程中,通常利用大型应用软件(例如SPEC的基准测试包)对编译器做软件测试。当应用软件在成熟的编译器下运行时,应用软件能够顺利运行,而应用软件在所研发的编译器下运行时,应用软件可能会出错,通过对应用软件出错情况和出错位置的判别可实现对编译器稳定性以及性能的测评,并找出编译器的相应缺陷。但是这些应用软件一般由多个源文件组成,每个源文件包括多个函数。当如此大型的测试程序出现运行错误时,很难对其出错位置以及造成错误的编译器方面的原因进行快速定位,于是运行错误的快速定位就成为编译器开发过程中急待解决的问题。
编译器的编译过程大致可以分为:词法分析、语法分析、语义分析、优化以及代码生成。前端的词法分析、语法分析、语义分析生成中端代码,中端代码优化后生成后端代码,后端代码优化后得到编译后的目标文件。前端的分析工作是十分成熟的现有技术,因此在编译器中不考虑前端的问题,如果编译器出现问题,则主要集中在优化方面。在利用大型应用程序对编译器进行测试的过程中,出错信息主要包括三个方面,分别为:出错区域、导致错误的优化选项、导致错误的优化阶段。出错区域是指测试用的大型应用程序运行时错误的出错位置,出错区域从大到小可以分为源文件、函数单元、控制流图的区域、区域中的基本块、基本块中的指令。如果定位的错误区域的范围越小,就越有利于研究人员做后继的分析工作。
目前,对运行错误分析的方法主要是利用调试器对运行过程中的错误进行手工定位,进而分析出错原因。但这种方法对于某些运行时错误(如结果错误)位置的查找十分低效。对错误位置的定位范围过大,使得开发人员需要耗费大量的时间和精力用于进一步定位错误的位置,不利于后续工作的进行。
如果可以提供一种对编译器中的错误进行自动定位的方法,能够尽可能地减小错误所在区域的查找范围,提供导致错误的优化选项,对于开发人员进行后续工作,最终找到编译器本身的错误,具有重要的意义。
发明内容
本发明的目的是克服现有技术中对错误位置的定位范围过大,不利于错误定位实现的缺点,提供一种对编译器中的错误进行自动定位的方法,实现对编译器错误的快速、自动查找。
为了实现上述目的,本发明提供一种对编译器中的错误进行自动定位的方法,包括以下步骤:
1)、利用编译器编译应用程序的源文件,得到应用程序的目标文件,所得到的所有目标文件组成目标文件集合;
2)、对步骤1)得到的目标文件集合,利用二分法和替代法实现对目标文件集合中的错误目标文件的定位;
3)、对步骤2)所得到的错误目标文件,利用编译器所提供的函数的优化开关选项,结合二分法,定位出错函数;
4)、从步骤3)所得到的出错函数中利用编译器提供的优化开关选项,结合二分法,定位可能引起错误的优化阶段,减小错误所在区域的查找范围,得到最初导致错误的优化阶段和导致错误的编译器的优化开关选项。
上述技术方案中,所述的步骤1)中,编译器编译应用程序的源文件时分别用正确的编译器和待检测的编译器对应用程序的源文件做编译,得到各自的目标文件集合,将正确编译器编译所得目标文件集合记为正确文件集合,将待检测编译器编译所得目标文件集合记为错误目标文件集合。
上述技术方案中,所述的步骤2)中,所述的利用二分法和替代法实现对目标文件集合中的错误目标文件的定位,具体包括:
2-1、将步骤1)得到的正确文件集合和错误目标文件集合放在不同的目录下;
2-2、在每个文件集合中,设置文件的初始考察范围,将文件按照字母进行排序,将考察范围的最低点的值设置为1,对应于第一个文件,将最高点的值设置为该文件集合中文件的总个数,对应于最后一个文件,将最低点和最高点的中间值设置为中间点的值,对应最低点与最高点中间的文件;
2-3、判断最低点的值是否小于最高点的值与1的差值,如果判断条件不成立,则将错误目标文件集合中最低点所代表的文件与正确文件集合中除去最低点所代表文件的其他文件进行链接并运行,如果出现运行结果错误,则最低点文件就是所求错误目标文件,如果运行结果正确,则最高点文件为所求错误目标文件,结束错误目标文件定位过程;如果判断条件成立,将错误目标文件集合中最低点与中间点之间的目标文件与正确文件集合中中间点后到最高点间的目标文件链接成目标代码,观察运行结果,若运行结果正确,转入步骤2-4,若运行结果错误,转入步骤2-5;
2-4、重新设置最低点的值,将原中间点的值赋给最低点,并根据最高点的值和新的最低点的值重新计算中间点的值,然后按照步骤2-3对最低点和最高点间的文件重新进行判断;
2-5、重新设置最高点的值,将原中间点的值赋给最高点,并根据最低点的值和新的最高点的值重新计算中间点的值,然后按照步骤2-3对最低点和最高点间的文件重新进行判断。
上述技术方案中,所述的步骤3)中,所述的利用编译器所提供的函数的优化开关选项,结合二分法,定位出错函数,具体包括:
3-1、对步骤2)所得到的错误目标文件,设定函数的初始考察范围,将所述错误目标文件中所有函数按照编译的顺序进行排序,将考察范围的最低点的值设为1,对应于第1个函数,最高点的值与该错误目标文件中的函数个数相同,对应于最后一个函数,将中间点的值设置为最高点和最低点的中间值,对应于最高点与最低点中间的函数;
3-2、判断最低点的值是否小于最高点的值与1的差值,如果判断条件不成立,则打开最低点函数的优化开关,同时关闭其余函数的优化开关,然后运行函数所在的目标文件,如果运行出现错误,则最低点的函数就是所求出错函数,如果运行正确,则最高点的函数为所求出错函数,退出出错函数的定位过程;如果判断条件成立,则打开最低点到中间点间函数的优化开关,关闭错误目标文件中间点后到最高点间函数的优化开关,重新进行编译,并将编译出来的文件重新链接成目标代码,观察目标代码的运行结果是否正确,若正确转入步骤3-3,否则转到步骤3-4;
3-3、重新设置最低点的值,将原中间点的值赋给最低点,并根据最高点的值和新的最低点的值重新计算中间点的值,然后按照步骤3-2对最低点和最高点间的函数重新进行判断;
3-4、重新设置最高点的值,将原中间点的值赋给最高点,并根据最低点的值和新的最高点的值重新计算中间点的值,然后按照步骤3-2对最低点和最高点间的函数重新进行判断。
上述技术方案中,所述的步骤4)中,所述的利用编译器提供的优化开关选项,结合二分法,得到最初导致错误的优化阶段和导致错误的编译器的优化开关选项,具体包括:
4-1、对某一指定的优化阶段进行检查,逐一关闭该优化阶段中的优化开关选项,当其中某个优化的开与关导致运行错误,则认为该指定的优化阶段是最初导致错误的优化阶段;
4-2、设定选项列表文件,该文件中包含有要做开关操作的编译器优化开关选项;
4-3、将选项列表文件中的每行命令的内容分解后按类存入对应的数组中,生成选项组合列表;
4-4、利用选项组合列表中的不同控制粒度的优化开关选项对函数进行考察;
4-5、根据考察的结果,得到一个优化开关选项组合,所述优化开关选项组合是可能导致错误的优化开关选项的集合。
所述的步骤4-3中,所述将选项列表文件中的每行命令的内容分解后按类存入对应的数组是指将选项列表文件中的内容按优化阶段名称、区域优化控制开关、基本块优化开关、指令优化控制开关存入数组中。
所述的步骤4-4中,所述的控制粒度包括区域、基本块和指令。
所述步骤4-4中,所述利用选项组合列表中的不同控制粒度的优化开关选项对函数进行考察是指按区域、基本块、指令的顺序分别对函数出错区域进行考察,并且每次考察都是基于前次考察所得选项的基础之上,通过增加新控制粒度选项来形成新的考察选项。
本发明的优点在于:
1、通过本发明的对编译器中的错误进行自动定位的方法,可实现对目标文件中的最初错误阶段的快速定位和错误优化开关选项的快速查找,有利于技术人员对后续分析工作的实现,减少了分析所占用的时间。
2、本发明具有很好的模块性,可以应用于针对大型软件的自动化测试过程中,在性能测试或者正确性测试的过程中,无需人工干预,直接对出现运行错误的软件进行及时的分析,提高测试效率,节省测试和分析时间。
附图说明
图1为本发明的对编译器中的错误进行自动定位的方法的流程图;
图2为本发明的对编译器中的错误进行自动定位的方法在定位错误目标文件时所用到的二分法和替代法的流程图。
具体实施方式
下面参照附图和具体实施方式,对本发明的方法做详细说明。
本发明的对编译器中的错误进行自动定位的方法,实现了对测试所使用的大型应用程序运行时产生错误的出错位置以及编译器出错阶段的快速定位,如图1所示,包括:
1)定位应用程序中出错的目标文件。本步骤是要实现当经过编译的应用程序发生运行错误时,对发生错误的文件进行定位。
在定位前,准备两个目录,一个用来存放正确的目标文件集合,另一个用来存放错误的目标文件集合。这里所说的正确的目标文件集合是应用程序使用已知的正确的编译器版本以及正确的优化选项进行编译后所得到的目标文件集合,错误的目标文件集合是利用当前待检测的编译器以及优化选项进行编译所得到的出错的目标文件集合。
在定位时综合运用二分法和替代法,依次用错误目标文件集合中的目标文件对正确文件集合中的同名目标文件进行替代并运行,若错误目标文件集合中的某一目标文件对正确文件集合中的同名文件做替代后,正确文件集合中的目标文件运行发生错误,则错误目标文件集合中的该目标文件包含错误。
在本实施例中,定位目标文件的具体操作可通过文件定位函数locate_file进行,其执行步骤如图2中所示,包括:
步骤10、用正确的编译器版本对应用程序的源文件进行编译,得到正确的目标文件集合,用待检测的编译器对应用程序的源文件进行编译,得到错误的目标文件集合,将两个文件集合分别放在各自的目录下;
步骤11、由于正确文件集合和错误目标文件集合是由相同的应用软件的源文件经过不同版本的编译器编译后得到的,因此正确文件集合和错误目标文件集合中的目标文件的个数相同,并且一一对应。在两个文件集合中,分别设文件个数为N,设定初始考察范围点[low,high],low的初始值为1,high的初始值为N,设置中间点mid为(high+low)/2。
步骤12、判断low的值是否小于high-1的值,如果判断条件不成立,则将错误目标文件集合中low所代表的文件与正确文件集合中其他文件进行链接并运行,如果出现运行错误,则low所代表的文件为所求错误目标文件,如果运行正确,则high所代表的文件为所求错误目标文件,得到所求错误目标文件后退出当前函数locate file,结束操作;否则按照二分法,将错误目标文件集合中[low,mid]部分与正确文件中[mid+1,high]集合链接成目标代码,观察运行结果,若正确转入步骤13,若错误转入步骤14。
步骤13、重新设置low的值,将它的值设置为mid,并根据公式(high+low)/2重新计算mid,然后转入步骤12中对[low,high]间的文件进行考察。
步骤14、重新设置high的值,将它的值设置为mid,并根据公式(high+low)/2重新计算mid,然后转入步骤12中对[low,high]之间的文件进行考察。
在错误目标文件集合中,发生错误的目标文件可能不止一个,利用二分法和替代法一次只能查找到一个错误文件。对二分法和替代法反复使用可实现对出错目标文件的逐一定位。
2)定位出错函数。确定错误目标文件后,在大多数情况下仍然无法确定何处是出错的位置,因此还需要缩小出错区域的范围,也就是要查找出错函数。
出错函数的定位是利用编译器所提供的函数的优化开关选项实现的,通过对某些函数是否做优化进行开关,将出错的区域从一个文件缩小到一个函数,使分析工作缩小至函数体内。在定位出错函数的过程中也要用到二分法,同时利用编译器提供的对函数的优化开关选项来进行定位,并增加了多次编译过程。编译器提供的对函数进行优化开关的选项包括:对指定范围的函数关闭中端和后端优化和对指定范围的函数关闭后端优化两种。在定位过程中只要使用对中端和后端优化同时进行控制的选项即可,它包括:从函数n关闭优化(-Wb,-OPT:skip_a=n)、从函数n开始进行优化(-Wb,-OPT:skip_b=n)、对函数n关闭优化(-Wb,-OPT:skip_e=n)等三种。
在本实施例中,对出错函数的定位过程可通过定位函数locate_PU来实现。locate_PU函数的具体操作包括:
步骤20、设定位得到的错误目标文件有N个函数,设定初始考察范围点为[low,high],low的初始值为1,high的初始值为N,设置中间点mid为(high+low)/2。
步骤21、判断low的值是否小于high-1的值,如果判断条件不成立,则打开low所代表函数的优化开关,关闭其他函数优化开关,运行该文件,如果出现运行错误,则low所代表的函数就是所求错误函数,如果运行正确,则high所代表的函数就是所求错误函数,退出当前函数locate_PU,否则按二分法,打开[low,mid]部分函数的优化,关闭[mid+1,high]部分函数的优化。将编译出来的文件重新链接成目标代码,观察运行结果是否正确,若正确则转入步骤22,若错误则转入步骤23。
步骤22、重新设置low的值,将它的值设置为mid,并根据公式(high+low)/2重新计算mid,然后转入步骤21,对[low,high]之间的函数进行考察。
步骤23、重新设置high的值,将它的值设置为mid,并根据公式(high+low)/2重新计算mid,然后转入步骤21,对[low,high]之间的函数进行考察。
函数的优化开关选项有三种,对locate_PU函数进行多次调用,在每次调用时选用不同的优化开关选项,从而找出错误函数。
3)定位错误的优化阶段。
针对出错的函数,可利用编译器提供的各种优化开关选项对该函数进行各种优化组合的尝试。这些组合选项包括中端和后端的多种优化阶段选项,如循环嵌套优化,控制流优化,指令调度等。对编译器中提供的多种优化开关选项逐一关闭,当某个优化开关选项的开与关导致了运行错误,就认为选项对应的优化阶段是最初导致错误的优化阶段。一个优化阶段对应一个或多个优化开关选项,一个优化开关选项可对特定的优化阶段产生影响,因此,找到出错的优化开关选项也就能找到最初导致错误的优化阶段。
因为运行错误通常是多种优化开关选项综合作用的结果,最初导致错误的优化阶段并不一定就是最终导致错误的原因,因此还需要进一步进行分析,而分析能否深入进行则取决于此种优化阶段对应的优化开关选项的控制粒度。在本方法中,可以由用户指定一个需要检查的优化阶段,判断其是否是最初导致错误的阶段,从而在编译选项定位方面进行简化。或者,直接使用函数以及选项文件提供的选项组合作为进一步考察的对象,通过二分法对控制粒度范围内的区域进行优化的开关,当某块区域的优化与否决定了运行是否正确时,就可以将此区域作为进一步考察的对象。不同选项可以选择对不同的控制粒度进行优化,控制粒度分为函数、控制流区域、基本块、指令。选项的控制粒度决定了能否继续对出错区域进行缩小,进而减少后面人工分析的工作量。如果一个选项的控制粒度为基本块或者指令,则最终可以将出错区域限制在基本块之内,相反,如果一个优化开关选项只能够控制函数,则很难对出错区域进行进一步的缩小。这部分工作主要通过调用locate_area函数实现,具体步骤包括:
步骤30、对指定的优化阶段进行检查,逐一关闭这些优化阶段对应的选项,当某个优化开关选项的开与关导致了运行错误,就认为它对应的优化阶段是最初导致错误的优化阶段,从而确定最初错误阶段。
步骤31、设定选项列表文件,选项列表文件中包含有要做开关操作的编译器优化开关选项,选项列表文件中的每一行包括优化阶段名称、优化阶段控制开关、区域优化控制开关、基本块优化开关、指令优化开关等各个选项。
步骤32、对选项列表文件中的内容按照优化阶段名称(phase_name),优化阶段控制开关(id),区域优化控制开关(rg_flag),基本块优化开关(bb_flag),指令优化开关(op_flag)进行解析,并将优化阶段名称、区域优化控制开关、基本块优化开关、指令优化控制开关分别存入数组phase_array、rg_flag_array、bb_flag_array、op_flag_array,生成选项组合列表。
步骤33、将定位函数得到的错误函数或者步骤30得到的错误函数的最初错误阶段作为考察对象,利用选项组合列表进行进一步处理。例如,若在步骤30中,发现控制流优化是函数中最初导致错误的优化阶段,则在本步骤中,将控制流优化所处的优化阶段作为考察对象。
步骤34、对步骤33所确定的考察对象,根据步骤32中产生的选项组合列表中的数组确定当前考察的控制粒度,所述的控制粒度分别为区域、基本块、指令等。利用选项组合列表中的不同控制粒度的优化开关选项对函数进行考察是指按区域、基本块、指令的顺序分别对函数出错区域进行考察,并且每次考察都是基于前次考察所得选项的基础之上,通过增加新控制粒度选项来形成新的考察选项。具体操作步骤如下。
a:当控制粒度为区域(Region)时,需要调用area_option(“rg”)来产生区域的选项组合。其中,参数”rg”表示目前检查的范围以区域为单位。area_option函数会将选项数组中对应该阶段的选项开关以及选项中对区域的控制子选项加入进来,从而实现对某选项控制下的区域的优化范围进行检查。以一个具体实施例为例,在编译器中使用的命令行为:$rg_flag_array[$n]$skip_fag=$pu_num%$skip_num,它包括两部分,等号前后分别为选项名称部分和赋值部分。其中,$rg_flag_array是全部的选项数组,$rg_flag_array[$n]用来指定某种控制选项名称,$skip_flag用来指定该选项中用于控制区域范围的子选项名称,$pu_num和$skip_num分别指定函数的序号和指定进行优化开关的区域序号。如“-Wb,-SKIP:glos_skip_rgn_a=fullGtU:4”,这个选项的选项名称为-Wb,-SKIP:glos_skip_rgn_a,表示全局指令调度部分(glos)的优化,glos_skip_rgn_a中skip和a(表示after)表示关闭指定区域后面的全局指令调度优化,这里的指定区域就是函数fullGtU中第4个区域。
b:当考察的粒度为基本块时,调用area_option(“bb”)产生基本块的选项组合。其中,参数“bb”表示目前检查的范围以基本块为单位。函数area_option的作用与前述的area_option函数相类似,也是要将数组中对应该阶段的选项开关以及选项中对基本块的控制子选项加入进来,对基本块的优化范围进行控制。在一个具体实施例中,将命令行$bb_flag_array[$n]$skip_flag=$pu num%$skip_num加入编译选项。其中,$bb_flag_array[$n]用来指定阶段对应的基本块的控制选项,$skip_flag用来指定用于控制基本块范围的选项,$pu_num和$skip_num分别指定函数的序号和指定进行优化开关的区域序号。如命令行“-Wb,-SKIP:locs_skip_bb_e=fullGtU:3”,这个选项的选项名称为-Wb,-SKIP:locs_skip_bb_e,它表示的优化阶段是局部指令调度优化阶段(locs),其中bb表示优化的基本单位为基本块,skip和e(表示equal)表示关闭指定的基本块的局部指令调度优化,这里的指定基本块是fullGtU函数中第3个基本块。
c:当考察的粒度为指令时,调用area_option(“op”)产生指令的选项组合。其中,参数“op”表示目前检查的范围以指令为单位。函数area_option的作用与前述的area_option函数相类似,但对指令范围的检查必须同时加入对基本块的优化控制,即必须指定是在哪个范围内进行指令的检查。如果在用户提供的选项数组中没有指定某个基本块为考察对象(即没有任何选项包括-bb选项),则需要将步骤b中找到的基本块作为指定基本块,将$bb_flag_array[$n]$AFTER=$find_bb和$op_flag_array[$n]$skip_flag=$pu_num%$skip_num加入编译选项,这组选项由两部分组成,前一部分用来指定基本块,后一部分则指定了待查的指令范围。如果在用户提供的选项数组中指定了需要考察的基本块,则可以在基本块内指定某一段考察范围,将其他基本块优的相关优化全部关闭,如″$bb_flag_array[$n]$AFTER=$find_bb和$bb_flag_array[$n]$BEFORE=$find_bb$op_flag_array[$n]$skip_flag=$pu_num%$skip_num,此处,分别用$AFTER和$BEFORE来关闭指定基本块前后范围的优化。$op_flag_array[$n]用来指定对指令范围进行开关控制的选项。
步骤35、由上述的a、b、c产生相应的选项结果后,可以确定导致错误的优化开关选项组合。
通过本发明所述方法能将应用程序的错误范围缩小,并给出一个选项组合,在该选项组合中的各个优化开关选项都是可能导致错误的优化开关选项。相关技术人员根据本发明所述方法所得到的结果,直接对应用程序的出错范围和选项进行分析,寻找编译器最终的导致错误的原因,也就能找到编译器本身的错误,从而节省了大量机械化分析过程占用的时间。

Claims (8)

1、一种对编译器中的错误进行自动定位的方法,包括以下步骤:
1)、利用编译器编译应用程序的源文件,得到应用程序的目标文件,所得到的所有目标文件组成目标文件集合;
2)、对步骤1)得到的目标文件集合,利用二分法和替代法实现对目标文件集合中的错误目标文件的定位;
3)、对步骤2)所得到的错误目标文件,利用编译器所提供的函数的优化开关选项,结合二分法,定位出错函数;
4)、从步骤3)所得到的出错函数中利用编译器提供的优化开关选项,结合二分法,定位可能引起错误的优化阶段,减小错误所在区域的查找范围,得到最初导致错误的优化阶段和导致错误的编译器的优化开关选项。
2、根据权利要求1所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤1)中,编译器编译应用程序的源文件时分别用正确的编译器和待检测的编译器对应用程序的源文件做编译,得到各自的目标文件集合,将正确编译器编译所得目标文件集合记为正确文件集合,将待检测编译器编译所得目标文件集合记为错误目标文件集合。
3、根据权利要求2所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤2)中,所述的利用二分法和替代法实现对目标文件集合中的错误目标文件的定位,具体包括:
2-1、将步骤1)得到的正确文件集合和错误目标文件集合放在不同的目录下;
2-2、在每个文件集合中,设置文件的初始考察范围,将文件按照字母进行排序,将考察范围的最低点的值设置为1,对应于第一个文件,将最高点的值设置为该文件集合中文件的总个数,对应于最后一个文件,将最低点和最高点的中间值设置为中间点的值,对应最低点与最高点中间的文件;
2-3、判断最低点的值是否小于最高点的值与1的差值,如果判断条件不成立,则将错误目标文件集合中最低点所代表的文件与正确文件集合中除去最低点所代表文件的其他文件进行链接并运行,如果出现运行结果错误,则最低点文件就是所求错误目标文件,如果运行结果正确,则最高点文件为所求错误目标文件,结束错误目标文件定位过程;如果判断条件成立,将错误目标文件集合中最低点与中间点之间的目标文件与正确文件集合中中间点后到最高点间的目标文件链接成目标代码,观察运行结果,若运行结果正确,转入步骤2-4,若运行结果错误,转入步骤2-5;
2-4、重新设置最低点的值,将原中间点的值赋给最低点,并根据最高点的值和新的最低点的值重新计算中间点的值,然后按照步骤2-3对最低点和最高点间的文件重新进行判断;
2-5、重新设置最高点的值,将原中间点的值赋给最高点,并根据最低点的值和新的最高点的值重新计算中间点的值,然后按照步骤2-3对最低点和最高点间的文件重新进行判断。
4、根据权利要求1所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤3)中,所述的利用编译器所提供的函数的优化开关选项,结合二分法,定位出错函数,具体包括:
3-1、对步骤2)所得到的错误目标文件,设定函数的初始考察范围,将所述错误目标文件中所有函数按照编译的顺序进行排序,将考察范围的最低点的值设为1,对应于第1个函数,最高点的值与该错误目标文件中的函数个数相同,对应于最后一个函数,将中间点的值设置为最高点和最低点的中间值,对应于最高点与最低点中间的函数;
3-2、判断最低点的值是否小于最高点的值与1的差值,如果判断条件不成立,则打开最低点函数的优化开关,同时关闭其余函数的优化开关,然后运行函数所在的目标文件,如果运行出现错误,则最低点的函数就是所求出错函数,如果运行正确,则最高点的函数为所求出错函数,退出出错函数的定位过程;如果判断条件成立,则打开最低点到中间点间函数的优化开关,关闭错误目标文件中间点后到最高点间函数的优化开关,重新进行编译,并将编译出来的文件重新链接成目标代码,观察目标代码的运行结果是否正确,若正确转入步骤3-3,否则转到步骤3-4;
3-3、重新设置最低点的值,将原中间点的值赋给最低点,并根据最高点的值和新的最低点的值重新计算中间点的值,然后按照步骤3-2对最低点和最高点间的函数重新进行判断;
3-4、重新设置最高点的值,将原中间点的值赋给最高点,并根据最低点的值和新的最高点的值重新计算中间点的值,然后按照步骤3-2对最低点和最高点间的函数重新进行判断。
5、根据权利要求1所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤4)中,所述的利用编译器提供的优化开关选项,结合二分法,得到最初导致错误的优化阶段和导致错误的编译器的优化开关选项,具体包括:
4-1、对某一指定的优化阶段进行检查,逐一关闭该优化阶段中的优化开关选项,当其中某个优化选项的开与关导致运行错误,则认为该指定的优化阶段是最初导致错误的优化阶段;
4-2、设定选项列表文件,该选项列表文件中包含有要做开关操作的编译器优化开关选项;
4-3、将选项列表文件中的每行命令的内容分解后按类存入对应的数组中,生成选项组合列表;
4-4、利用选项组合列表中的不同控制粒度的优化开关选项对函数进行考察;
4-5、根据考察的结果,得到一个优化开关选项组合,所述优化开关选项组合是可能导致错误的优化开关选项的集合。
6、根据权利要求5所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤4-3中,所述将选项列表文件中的每行命令的内容分解后按类存入对应的数组是指将选项列表文件中的内容按优化阶段名称、区域优化控制开关、基本块优化开关、指令优化控制开关存入数组中。
7、根据权利要求5所述的对编译器中的错误进行自动定位的方法,其特征在于,所述的步骤4-4中,所述的控制粒度包括区域、基本块和指令。
8、根据权利要求5所述的对编译器中的错误进行自动定位的方法,其特征在于,所述步骤4-4中,所述利用选项组合列表中的不同控制粒度的优化开关选项对函数进行考察是指按区域、基本块、指令的顺序分别对函数出错区域进行考察,并且每次考察都是基于前次考察所得选项的基础之上,通过增加新控制粒度选项来形成新的考察选项。
CNB2005100900932A 2005-08-12 2005-08-12 一种对编译器中的错误进行自动定位的方法 Expired - Fee Related CN100442243C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100900932A CN100442243C (zh) 2005-08-12 2005-08-12 一种对编译器中的错误进行自动定位的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100900932A CN100442243C (zh) 2005-08-12 2005-08-12 一种对编译器中的错误进行自动定位的方法

Publications (2)

Publication Number Publication Date
CN1912848A CN1912848A (zh) 2007-02-14
CN100442243C true CN100442243C (zh) 2008-12-10

Family

ID=37721789

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100900932A Expired - Fee Related CN100442243C (zh) 2005-08-12 2005-08-12 一种对编译器中的错误进行自动定位的方法

Country Status (1)

Country Link
CN (1) CN100442243C (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101418969B1 (ko) * 2008-02-27 2014-08-13 삼성전자주식회사 프로세서 및 컴파일 방법
CN102446134B (zh) * 2010-10-13 2015-04-08 无锡江南计算技术研究所 一种实现编译器错误的自动定位方法和装置
CN104281518B (zh) * 2013-07-02 2018-05-15 腾讯科技(深圳)有限公司 终端应用测试方法、装置、系统、平台及移动终端
CN106909500B (zh) * 2015-12-23 2021-02-02 黄正兰 机载软件开发过程中引入错误的检测方法和系统
CN106445627A (zh) * 2016-10-14 2017-02-22 郑州云海信息技术有限公司 一种代码集成编译中问题定位的方法及装置
CN112506515A (zh) * 2019-09-16 2021-03-16 努比亚技术有限公司 一种编译控制方法、终端及计算机可读存储介质
CN110704065B (zh) * 2019-10-09 2021-04-20 大连理工大学 基于非法程序输入的编译器前端差分测试方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754860A (en) * 1996-07-23 1998-05-19 Digital Equipment Corporation Method and apparatus for software testing using a differential testing technique to test compilers
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
WO2004003739A1 (en) * 2002-06-28 2004-01-08 Abb As Revalidation of a compiler for safety control

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754860A (en) * 1996-07-23 1998-05-19 Digital Equipment Corporation Method and apparatus for software testing using a differential testing technique to test compilers
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
WO2004003739A1 (en) * 2002-06-28 2004-01-08 Abb As Revalidation of a compiler for safety control

Also Published As

Publication number Publication date
CN1912848A (zh) 2007-02-14

Similar Documents

Publication Publication Date Title
CN100442243C (zh) 一种对编译器中的错误进行自动定位的方法
CN106909510B (zh) 一种获取测试用例的方法以及服务器
CN101739339B (zh) 一种基于程序动态依赖关系的软件故障定位方法
US20210209008A1 (en) Unit testing method based on automatic generation of path coverage test cases
US20080104096A1 (en) Software development system
Wotawa et al. Model-based debugging or how to diagnose programs automatically
CN110750459B (zh) 基于白盒分析的测试用例自动生成和测试进程管理方法
WO2011060655A1 (zh) 软件业务功能覆盖率的统计方法及系统
CN105760296A (zh) 自动化测试控制方法、装置及终端
Maciel et al. From Requirements to Automated Acceptance Tests of Interactive Apps: An Integrated Model-based Testing Approach.
CN106021101A (zh) 对移动终端进行测试的方法及装置
CN107526679A (zh) 自动化测试框架、基于其上的自动化测试方法、存储介质和计算机设备
CN102446134B (zh) 一种实现编译器错误的自动定位方法和装置
US10402309B2 (en) Code coverage tracking for a microcontroller program
CN104199770A (zh) 一种手机音乐apk的自动化测试方法
CN104461864A (zh) 一种基于Eclipse插件的Java源代码缺陷检测方法及其系统
CN105893104A (zh) 代码编译的方法和装置
CN112052180A (zh) 一种基于控件排列的稳定性测试的方法及系统
CN104536880A (zh) 基于符号执行的gui程序测试用例扩增方法
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
Chesley et al. Crisp--a fault localization tool for java programs
JP4763743B2 (ja) プログラム動作比較装置及び方法及びプログラム
CN109101355A (zh) 一种提取错误现场特征测试激励的处理器调试方法
CN114780374A (zh) 一种基于细粒度优化选项配置差分的编译器缺陷定位方法
Horwitz Tool support for improving test coverage

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: DONGGUAN LIANZHOU ELECTRONIC TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: INSTITUTE OF COMPUTING TECHNOLOGY, CHINESE ACADEMY OF SCIENCES

Effective date: 20130116

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100080 HAIDIAN, BEIJING TO: 523000 DONGGUAN, GUANGDONG PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20130116

Address after: 523000 Yuquan Industrial Zone, Fenggang Town, Guangdong, Dongguan

Patentee after: Dongguan Lianzhou Electronic Technology Co., Ltd.

Address before: 100080 Haidian District, Zhongguancun Academy of Sciences, South Road, No. 6, No.

Patentee before: Institute of Computing Technology, Chinese Academy of Sciences

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20081210

Termination date: 20150812

EXPY Termination of patent right or utility model