一种动态断点的自动生成方法及系统技术方案

技术编号:8413078 阅读:148 留言:0更新日期:2013-03-14 02:08
本发明专利技术公开一种动态断点的自动生成方法和系统,所述系统包括:创建动态依赖图模块,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;精化调试范围模块,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;构建状态流程图模块,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;生成动态断点模块,用于生成动态断点以及断点处需要检查的表达式的集合;收集调试反馈模块,用于收集用户对所提供的断点以及断点处需要检查的表达式的集合的判断结果。

【技术实现步骤摘要】

本专利技术涉及计算机调试领域,尤其涉及一种动态断点的自动生成方法及系统
技术介绍
程序调试是发现并减少计算机程序中错误的过程。典型的调试流程包括三步I)复现错误执行过程。2 )设置一个检查位置,并检查该位置上的程序状态是否符合设计预期。其中,对指定位置上程序状态的检查表现为对该位置上一组可见表达式的计算结果的检查。 3)根据2)的检查结果,选择下一个检查位置,直至定位到导致程序执行失败的根源语句。上述过程是一个将错误查找范围从全程序执行轨迹向错误原因所在的位置逐步收敛的过程,其间包含若干次迭代,每次迭代对应一次断点的选择、命中与检查。在每一次迭代,调试人员针对当前需要分析的程序轨迹(整个程序执行轨迹的一个子集),选定一个检查位置,一旦确定该位置上的程序执行状态是否符合程序设计意图,即可初步判断该位置与错误的初始触发位置间的先后顺序。上述方法决定了以断点位置为界分割出两部分轨迹中将有一个部分被作为新一轮迭代的分析范围。然而,在实际调试过程中,对断点的选择、检查以及对收敛方向的判断面临如下问题I)断点的可判性。程序执行轨迹上某个位置对应的程序状态表现为一组表达式在该位置上的计算结果。为判断某个位置上的程序状态是否符合设计意图,调试人员必须明确该位置上所有可见表达式的预期计算结果。这就要求调试人员对所调试的程序乃至其设计意图有充分的了解。通常情况下,程序规模越大、越复杂,理解难度越高,调试人员对预期计算结果的分析也越繁重。2)断点的有效性。从程序依赖的角度,程序中并非每条语句的执行都与程序的失效表现之间存在直接或间接的依赖关系。为减轻调试人员分析和理解程序的负担,应尽量避免对与失效表现无关的程序语句的计算结果的判断。对冗余语句计算结果的检查固然会导致不必要的分析负担,而一旦遗漏了与错误相关的表达式,也可能导致调试范围向相反的方向收敛,从而降低调试效率,最坏情况下可能无法定位到错误源。如何选择有效的断点,以避免上述情况?3)断点的检查效率。如前所述,对程序执行轨迹上某个状态的检查表现为对该位置上一组可见表达式的计算结果的检查。不同位置上,与程序失效表现间存在直接或间接依赖关系的表达式的数量各不相同。因此,选择不同位置设置断点,需要检查的表达式数量也不尽相同。通常情况下,所选断点处的需要检查的表达式数量越多,调试人员的检查负担也越繁重。如何维持尽可能少的交互量,以减轻调试人员的负担?
技术实现思路
为解决上述问题,本专利技术的目的为减轻调试人员的分析和理解程序的负担,弱化调试人员的经验或对被调试程序的理解程度对调试效率的影响,本专利技术针对待调试的程序以及程序的一条错误执行轨迹,利用图论中最小割集的性质,提出一种动态断点的自动生成方法和系统,并确保所选断点处与调试人员间的交互信息量最小。本专利技术公开一种动态断点的自动生成方法,包括步骤I,在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;步骤2,利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;步骤3,将步骤2输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图; 步骤4,生成动态断点以及断点处需要检查的表达式的集合;步骤5,对于所提供的断点以及断点处需要检查的表达式的集合进行判断,根据该判断结果,更新调试范围和失效描述,并将控制转移到步骤2或步骤3。所述的动态断点的自动生成方法,所述步骤I还包括步骤21,动态插桩技术通过在程序执行过程中在线的插入记录代码,收集用户所关注的动态执行信息,所述动态执行信息为所执行的语句实例,以及其中每个变量的值;步骤22,动态依赖分析技术将依据所述动态执行信息,分析程序执行过程中的动态依赖关系,所述动态依赖关系为动态数据依赖关系和动态控制依赖关系。所述的动态断点的自动生成方法,所述步骤22还包括步骤31,分析动态控制依赖关系时,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t ;步骤32,分析动态数据依赖关系时,语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。所述的动态断点的自动生成方法,所述步骤2还包括步骤41,读取由用户指定程序失效描述;步骤42,对于程序失效描述中的每个二元组〈var,inst>,动态程序切片将在动态依赖图上,提取变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围;步骤43,将调试范围都映射成动态依赖图的一个子图。所述的动态断点的自动生成方法,所述步骤3还包括步骤51,有向图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移;步骤52,有向边上的标签代表决定从边的源点指代到状态到边的终点指代的状态之间迁移的一个约束条件,一个新状态的产生由其所有入边上的约束条件共同决定。所述的动态断点的自动生成方法,所述步骤4还包括步骤61,计算状态流程图的最小割集,割是状态流程图的一个划分,划分产生两个结点集合,属于不同结点集合的结点互不连通;割的大小为跨越它的所有有向边的数量,上述有向边的集合称为该图的割集,其中,规模最小的割集称为最小割集;步骤62,在将生成的最小割集映射成断点时,选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置,如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;步骤63,将割集中各边上的标签构成的集合作为断点位置上需要检查的表达式集口 ο所述的动态断点的自动生成方法,所述步骤5还包括步骤71,收集用户对断点处表达式集合的判断结果;判断结果分两种1、集合中的所有表达式在断点处的计算结果均符合设计预期;2、其中至少有一个表达式的计算结果不符合程序设计意图;步骤72,根据步骤71的判断结果,更新调试范围和失效描述,并返回到步骤2或步骤3 ;所述的动态断点的自动生成方法,所述步骤72还包括步骤81,对于步骤72集合中的所有表达式在断点处的计算结果均符合设计预期的情况,错误源位于断点之后的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回步骤3;步骤82,对于步骤72其中至少有一个表达式的计算结果不符合程序设计意图的情况,错误源位于断点之前的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述,然后返回步骤2。本专利技术还公开一种动态断点的自动生成系统,包括 创建动态依赖图模块,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;精化调试范围模块,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;构建状态流程图模块,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;生成动态断点模块,用于生成动态断点以及断点处需要检查的表达式的集合;收集调试反馈模块,用于读取对于所提供的断本文档来自技高网
...

【技术保护点】
一种动态断点的自动生成方法,其特征在于,包括:步骤1,在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;步骤2,利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;步骤3,将步骤2输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;步骤4,生成动态断点以及断点处需要检查的表达式的集合;步骤5,收集用户对所提供的断点以及断点处需要检查的表达式的集合的判断结果,根据该判断结果,更新调试范围和失效描述,并将控制转移到步骤2或步骤3。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:李丰霍玮陈聪明李龙衷璐洁冯晓兵
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

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

1