CN102968369A - 一种动态断点的自动生成方法及系统 - Google Patents
一种动态断点的自动生成方法及系统 Download PDFInfo
- Publication number
- CN102968369A CN102968369A CN2012104473217A CN201210447321A CN102968369A CN 102968369 A CN102968369 A CN 102968369A CN 2012104473217 A CN2012104473217 A CN 2012104473217A CN 201210447321 A CN201210447321 A CN 201210447321A CN 102968369 A CN102968369 A CN 102968369A
- Authority
- CN
- China
- Prior art keywords
- dynamic
- breakpoint
- module
- program
- debugging
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种动态断点的自动生成方法和系统,所述系统包括:创建动态依赖图模块,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;精化调试范围模块,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;构建状态流程图模块,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;生成动态断点模块,用于生成动态断点以及断点处需要检查的表达式的集合;收集调试反馈模块,用于收集用户对所提供的断点以及断点处需要检查的表达式的集合的判断结果。
Description
技术领域
本发明涉及计算机调试领域,尤其涉及一种动态断点的自动生成方法及系统。
背景技术
程序调试是发现并减少计算机程序中错误的过程。典型的调试流程包括三步:
1)复现错误执行过程。
2)设置一个检查位置,并检查该位置上的程序状态是否符合设计预期。其中,对指定位置上程序状态的检查表现为对该位置上一组可见表达式的计算结果的检查。
3)根据2)的检查结果,选择下一个检查位置,直至定位到导致程序执行失败的根源语句。
上述过程是一个将错误查找范围从全程序执行轨迹向错误原因所在的位置逐步收敛的过程,其间包含若干次迭代,每次迭代对应一次断点的选择、命中与检查。在每一次迭代,调试人员针对当前需要分析的程序轨迹(整个程序执行轨迹的一个子集),选定一个检查位置,一旦确定该位置上的程序执行状态是否符合程序设计意图,即可初步判断该位置与错误的初始触发位置间的先后顺序。上述方法决定了以断点位置为界分割出两部分轨迹中将有一个部分被作为新一轮迭代的分析范围。然而,在实际调试过程中,对断点的选择、检查以及对收敛方向的判断面临如下问题:
1)断点的可判性。程序执行轨迹上某个位置对应的程序状态表现为一组表达式在该位置上的计算结果。为判断某个位置上的程序状态是否符合设计意图,调试人员必须明确该位置上所有可见表达式的预期计算结果。这就要求调试人员对所调试的程序乃至其设计意图有充分的了解。通常情况下,程序规模越大、越复杂,理解难度越高,调试人员对预期计算结果的分析也越繁重。
2)断点的有效性。从程序依赖的角度,程序中并非每条语句的执行都与程序的失效表现之间存在直接或间接的依赖关系。为减轻调试人员分析和理解程序的负担,应尽量避免对与失效表现无关的程序语句的计算结果的判断。对冗余语句计算结果的检查固然会导致不必要的分析负担,而一旦遗漏了与错误相关的表达式,也可能导致调试范围向相反的方向收敛,从而降低调试效率,最坏情况下可能无法定位到错误源。如何选择有效的断点,以避免上述情况?
3)断点的检查效率。如前所述,对程序执行轨迹上某个状态的检查表现为对该位置上一组可见表达式的计算结果的检查。不同位置上,与程序失效表现间存在直接或间接依赖关系的表达式的数量各不相同。因此,选择不同位置设置断点,需要检查的表达式数量也不尽相同。通常情况下,所选断点处的需要检查的表达式数量越多,调试人员的检查负担也越繁重。如何维持尽可能少的交互量,以减轻调试人员的负担?
发明内容
为解决上述问题,本发明的目的为减轻调试人员的分析和理解程序的负担,弱化调试人员的经验或对被调试程序的理解程度对调试效率的影响,本发明针对待调试的程序以及程序的一条错误执行轨迹,利用图论中最小割集的性质,提出一种动态断点的自动生成方法和系统,并确保所选断点处与调试人员间的交互信息量最小。
本发明公开一种动态断点的自动生成方法,包括:
步骤1,在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;
步骤2,利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;
步骤3,将步骤2输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;
步骤4,生成动态断点以及断点处需要检查的表达式的集合;
步骤5,对于所提供的断点以及断点处需要检查的表达式的集合进行判断,根据该判断结果,更新调试范围和失效描述,并将控制转移到步骤2或步骤3。
所述的动态断点的自动生成方法,所述步骤1还包括:
步骤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。
本发明还公开一种动态断点的自动生成系统,包括:
创建动态依赖图模块,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;
精化调试范围模块,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;
构建状态流程图模块,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;
生成动态断点模块,用于生成动态断点以及断点处需要检查的表达式的集合;
收集调试反馈模块,用于读取对于所提供的断点以及断点处需要检查的表达式的集合的判断结果;根据该判断结果,更新调试范围和失效描述,并将控制转移到构建状态流程图模块或精化调试范围模块。
所述的动态断点的自动生成系统,所述创建动态依赖图模块还包括:
动态插柱模块,用于动态插桩技术通过在程序执行过程中在线的插入记录代码,收集用户所关注的动态执行信息,所述动态执行信息为所执行的语句实例,以及其中每个变量的值;
依赖关系模块,用于动态依赖分析技术将依据所述动态执行信息,分析程序执行过程中的动态依赖关系,所述动态依赖关系为动态数据依赖关系和动态控制依赖关系。
所述的动态断点的自动生成系统,所述依赖关系模块还包括:
控制依赖模块,用于分析动态控制依赖关系时,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t;
数据依赖模块,用于分析动态数据依赖时,语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。
所述的动态断点的自动生成系统,所述精化调试范围模块还包括:
失效描述模块,用于读入由用户指定的程序失效描述;
范围提取模块,用于对于程序失效描述中的每个二元组<var,inst>,通过动态程序切片,提取动态依赖图上,变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围。
映射模块,用于将调试范围映射成动态依赖图的一个子图;
所述的动态断点的自动生成系统,所述还构建状态流程图模块包括:
执行状态模块,用于有向图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移;
约束条件模块,用于有向边上的标签代表决定从边的源点指代到状态到边的终点指代的状态之间迁移的一个约束条件,一个新状态的产生由其所有入边上的约束条件共同决定。
所述的动态断点的自动生成系统,所述生成动态断点模块还包括:
最小割集模块,用于计算状态流程图上的最小割集。割是状态流程图的一个划分,划分产生两个结点集合,属于不同结点集合的结点互不连通;割的大小为跨越所有有向边的数量,上述有向边的集合称为该图的割集,其中,包含有向边数量最少的割集称为该图的最小割集;
断点位置模块,用于在将生成的最小割集映射成断点时,选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置;用于如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;
表达式模块,用于将割集中各边上的标签构成的集合作为断点位置上需要检查的表达式集合。
所述的动态断点的自动生成系统,所述收集调试反馈模块还包括:
判断结果模块,用于收集用户对断点处表达式集合的判断结果,判断结果分为两种:1、集合中的所有表达式在断点处的计算结果均符合设计预期;2、其中至少有一个表达式的计算结果不符合程序设计意图;
范围更新模块:用于根据判断结果模块收集到的结果,更新调试范围和失效描述,并将控制转移到构建状态流程图模块或生成动态断点模块。
所述的动态断点的自动生成系统,所述范围更新模块还包括:
后断点轨迹模块,用于对于判断结果模块集合中的所有表达式在断点处的计算结果均符合设计预期的情况,错误源显然位于断点之后的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回构建状态流程图模块;
前断点轨迹模块,用于对于判断结果模块其中至少有一个表达式的计算结果不符合程序设计意图的情况,错误源只能位于断点之前的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述,然后返回精化调试范围模块。
本发明具有以下有益效果:
减轻用户负担。本发明提出的断点生成方法代替调试人员选择断点,并确保所选位置具备最少的交互信息量,从而使调试人员只需要检查最少的表达式,即可确定断点处程序状态的正误。
提高调试效率。本发明通过最小化调试过程中与调试人员的交互,弱化人为因素对调试效率的影响,降低了不同调试人员间因调试经验或者对所调试的程序在理解程度上的差别而造成的调试效率差异。
所提供的断点更容易使用。本发明除提示断点的设置位置外,还提供了该位置上需要检查的表达式集合,避免调试人员因对所调试程序理解的不足而检查冗余的表达式或遗漏对某些表达式的检查而导致的不必要的开销。换而言之,调试人员通过检查上述集合,总能确定断点与错误源之间的位置关系,从而将调试的下一轮迭代所要分析的范围缩小到位于断点的某一侧的程序执行轨迹上。
能提供动态断点。本发明以程序执行轨迹为分析对象,所生成的断点仅对应程序执行轨迹上唯一的位置。
附图说明
图1为本发明动态断点的自动生成方法流程图;
图2A为本发明具体实施方式的程序执行片段;
图2B为本发明具体实施方式的状态流程图;
图2C为本发明具体实施方式的状态;
图3为本发明动态断点的自动生成系统流程图。
具体实施方式
下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。
断点的选择与检查是决定调试效率的关键因素之一。传统调试过程中,上述工作均由调试人员完成。本发明针对程序调试过程,提出一种旨在弱化人为因素对调试效率的影响,减轻调试人员分析理解程序的负担的动态断点自动生成方法。该方法的核心是将待调试的程序轨迹转化成一种特殊的图形表示,通过求解图的最小割集,自动提供断点位置以及该位置上需要检查的表达式的集合。
本发明以待调试的程序P、引起该程序失效的执行输入I,以及描述程序失效表现的集合D为输入。其中,D由一系列二元组<var,inst>构成,var是variable的缩写,代表变量名称;inst是instance的缩写,代表实例号。<var,inst>用于描述调试人员所观察到的程序失效表现,如:直接引起错误执行结果的程序变量实例(变量var的第inst个实例),程序执行过程中的某个错误的变量实例,等。本发明的核心是将断点选择问题转化为图论中的最小割集求解问题。基本原理如下:在程序执行过程中,利用动态插桩技术和动态依赖分析技术,再现待调试程序的错误执行过程,并提取程序执行轨迹上与错误描述相关的部分;将所提取的部分转化成本发明定义的一种名为状态流程图的图形表示形式。本发明定义状态流程图是一个有向无权图。图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移。有向边上的标签代表决定本次迁移的约束条件。断点位置以及待检查的表达式集合将根据状态流程图上求得的最小割集按照本发明指定的规则生成。
将断点选择问题转化为图论中的最小割集求解问题;断点的自动选择减轻调试人员手工选择断点的负担,降低人为因素调试效率的影响,特别是由于调试经验或对所调试的程序的理解程度不同而造成的效率差异;图论中最小割集的性质还确保了所选断点具有如下特征:通过最低限度的交互量,即可确定其与错误触发点间的位置关系,从而降低调试人员分析和理解程序的负担。
采用状态流程图的表示形式;状态流程图除描述程序执行过程中的状态迁移关系外,还描述了决定状态迁移的约束条件,通过使用上述表示形式计算断点,本发明除提示断点的设置位置外,还提供了该位置上需要检查的表达式集合,避免调试人员因对所调试程序理解的不足而检查冗余的表达式或遗漏对某些表达式的检查,从而导致不必要检查或回溯的开销。
本发明流程如附图1所示,其中长方形表示了主要步骤,右侧辅以注释说明各步骤的输入、输出、和操作。以下依序对各步骤做详细解释。
步骤1创建动态依赖图(dynamic program dependence graph,简称dPDG)。在程序执行过程中,利用动态插桩技术和动态依赖分析技术,收集程序语句的执行情况,分析实例间的依赖关系,并在此基础上创建动态依赖图。
动态插桩技术通过在程序执行过程中在线地插入记录代码,收集用户所关注的动态执行信息。本发明关注的动态执行信息包括:所执行的语句实例,以及其中各个变量的值。根据上述信息,可以再现程序的执行过程。动态依赖分析技术也将依据上述信息,分析程序执行过程中的动态依赖关系,包括:动态数据依赖关系和动态控制依赖关系。程序动态执行过程中,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t。语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。如果用结点表示所记录的语句实例,用有向边表示语句实例之间的动态依赖关系,所构成的有向图就称为动态依赖图。图中一条从结点N1到结点N2的边代表结点N1对应的语句实例(数据或控制)依赖于结点N2对应的语句实例。
步骤2精化调试范围。利用程序动态切片技术,提取动态依赖图上与程序失效描述D相关的部分。
调试过程中每轮迭代的分析范围都可以映射成动态依赖图的一个子图。程序失效描述由用户指定:初始状态下,即用户所观察到直接导致错误输出的变量实例;在之后的调试过程中,调试人员可以根据对本发明所提供的断点及相关表达式计算结果的检查情况,使用其认为与错误传播有关的其它变量实例的描述替代初始描述(由步骤5获得)。
对于程序失效描述D中的每个二元组<var,inst>,动态程序切片将在动态依赖图上,提取变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围。该范围也将被映射成程序动态依赖图的一个子图。
步骤3构建状态流程图(State-flow Graph,简称SFG)。将步骤2输出的动态依赖子图中的结点和边互换,将调试范围转化成一种新的图形表示:状态流程图。状态流程图是一个有向无权图。图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移。有向边上的标签代表决定从边的源点指代到状态到边的终点指代的状态之间迁移的一个约束条件。一个新状态的产生由其所有入边上的约束条件共同决定。
图2为状态流程图示例。图2A中的程序执行片段可以转化图2B所示的状态流程图,图中各结点Si(i=1,2,…,7)所对应的程序状态如图2C所示,其中,⊥代表未初始化。
步骤4生成动态断点。以步骤3输出的状态流程图为输入,计算该图的最小割,并将其映射到程序执行轨迹上,产生动态断点以及断点处需要检查的表达式的集合。
图论中,割是图的一个划分,划分产生的不同结点集间的结点互不连通。对无权图而言,割的大小就是跨越它所有有向边的数量,上述有向边的集合称为该图的最小割集。经典的最小割集算法有:Ford-Fulkerson算法、Edmonds-Karp算法、压入与重标记算法、重标记与前移算法等。
在将生成的最小割集映射成断点时,本发明选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置。如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;而由割集中各边上的标签构成的集合即该位置上需要检查的表达式集合。
步骤5收集调试反馈。
由调试人员对步骤4所提供的断点处表达式集合进行判断,判断结果分两种情况:1)集合中的所有表达式在断点处的计算结果均符合设计预期;2)其中至少有一个表达式的计算结果不符合设计意图。对于第1)种情况,错误源位于断点之后的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回步骤3。对于第2)种情况,错误源位于断点位置之前;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述D,然后返回步骤2。
如图3所示,本发明公开一种动态断点的自动生成系统,包括:
创建动态依赖图模块10,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;
精化调试范围模块20,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;
构建状态流程图模块30,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;
生成动态断点模块40,用于生成动态断点以及断点处需要检查的表达式的集合;
收集调试反馈模块50,用于读取用户对于所提供的断点以及断点处需要检查的表达式的集合的判断结果,并根据判断结果,更新调试范围和失效描述,再将控制转移到构建状态流程图模块或精化调试范围模块。
所述的动态断点的自动生成系统,所述创建动态依赖图模块还包括:
动态插柱模块,用于动态插桩技术通过在程序执行过程中在线的插入记录代码,收集用户所关注的动态执行信息,所述动态执行信息为所执行的语句实例,以及其中每个变量的值;
依赖关系模块,用于动态依赖分析技术将依据所述动态执行信息,分析程序执行过程中的动态依赖关系,所述动态依赖关系为动态数据依赖关系和动态控制依赖关系。
所述的动态断点的自动生成系统,所述依赖关系模块还包括:
控制依赖模块,用于分析动态控制依赖关系时,在程序执行过程中,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t;
数据依赖模块,用于分析动态数据依赖时,程序执行轨迹上,语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。
所述的动态断点的自动生成系统,所述精化调试范围模块还包括:
失效描述模块,用于读取由用户指定的程序失效描述;
范围提取模块,用于对于程序失效描述中的每个二元组<var,inst>,通过动态程序切片,提取动态依赖图上,变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围,该调试范围也对应程序动态依赖图的一个子图;
映射模块,用于将调试范围映射成动态依赖图的一个子图;
所述的动态断点的自动生成系统,所述还构建状态流程图模块包括:
执行状态模块,用于有向图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移;
约束条件模块,用于有向边上的标签代表决定从边的源点指代到状态到边的终点指代的状态之间迁移的一个约束条件,一个新状态的产生由其所有入边上的约束条件共同决定。
所述的动态断点的自动生成系统,所述生成动态断点模块还包括:
最小割集模块,用于计算状态流程图的最小割集,割是状态流程图的一个划分,划分产生两个结点集合,属于不同结点集合的结点互不连通;割的大小为跨越所有有向边的数量,上述有向边的集合称为该图的割集,其中,包含有向边数量最少的割集称为该图的最小割集;
断点位置模块,用于在将生成的最小割集映射成断点时,选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置;用于如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;
表达式模块,用于将割集中各边上的标签构成的集合作为断点位置上需要检查的表达式集合。
所述的动态断点的自动生成系统,所述收集调试反馈模块还包括:
判断结果模块,用于读取用户对表达式集合的判断结果;判断结果分为两种:1)集合中的所有表达式在断点处的计算结果均符合设计预期;2)其中至少有一个表达式的计算结果不符合程序设计意图;
范围更新模块,用户根据判断结果,更新调试范围和失效描述,并将控制转移到构建状态流程图模块或生成动态断点模块。
所述的动态断点的自动生成系统,所述范围更新模块还包括:
后断点轨迹模块,用于对于判断结果模块集合中的所有表达式在断点处的计算结果均符合设计预期的情况,错误源位于断点之后的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回构建状态流程图模块;
前断点轨迹模块,用于对于判断结果模块其中至少有一个表达式的计算结果不符合程序设计意图的情况,错误源位于断点之前的执行轨迹上;如果调试人员希望继续设置新断点,以便进一步发掘与错误源相关的线索,则提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述,然后返回精化调试范围模块。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
Claims (16)
1.一种动态断点的自动生成方法,其特征在于,包括:
步骤1,在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;
步骤2,利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;
步骤3,将步骤2输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;
步骤4,生成动态断点以及断点处需要检查的表达式的集合;
步骤5,收集用户对所提供的断点以及断点处需要检查的表达式的集合的判断结果,根据该判断结果,更新调试范围和失效描述,并将控制转移到步骤2或步骤3。
2.如权利要求1所述的动态断点的自动生成方法,其特征在于,所述步骤1还包括:
步骤21,动态插桩技术通过在程序执行过程中在线的插入记录代码,收集用户所关注的动态执行信息,所述动态执行信息为所执行的语句实例,以及其中每个变量的值;
步骤22,动态依赖分析技术将依据所述动态执行信息,分析程序执行过程中的动态依赖关系,所述动态依赖关系为动态数据依赖关系和动态控制依赖关系。
3.如权利要求2所述的动态断点的自动生成方法,其特征在于,所述步骤22还包括:
步骤31,分析动态控制依赖关系时,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t;
步骤32,分析动态数据依赖关系时,语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。
4.如权利要求1所述的动态断点的自动生成方法,其特征在于,所述步骤2还包括:
步骤41,读取由用户指定的程序失效描述;
步骤42,对于程序失效描述中的每个二元组<var,inst>,采用动态程序切片技术,从动态依赖图中提取变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围;
步骤43,调试过程中每轮迭代的分析范围都映射成动态依赖图的一个子图。
5.如权利要求1所述的动态断点的自动生成方法,其特征在于,所述步骤3还包括:
步骤51,有向图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移;
步骤52,有向边上的标签代表决定从边的源点指代的状态到边的终点指代的状态之间迁移的一个约束条件,一个新状态的产生由其所有入边上的约束条件共同决定。
6.如权利要求1所述的动态断点的自动生成方法,其特征在于,所述步骤4还包括:
步骤61,计算状态流程图的最小割集;割是状态流程图的一个划分,划分产生两个结点集合,属于不同结点集合的结点互不连通,割的大小为跨越它的所有有向边的数量,上述有向边的集合称为该图的割集,其中,规模最小的割集称为最小割集;
步骤62,在将生成的最小割集映射成断点时,选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置,如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;
步骤63,将割集中各边上的标签构成的集合作为断点位置上需要检查的表达式集合。
7.如权利要求1所述的动态断点的自动生成方法,其特征在于,所述步骤5还包括:
步骤71,收集用户对断点处表达式集合的判断结果,判断结果为分两种,1、集合中的所有表达式在断点处的计算结果均符合设计预期,2、其中至少有一个表达式的计算结果不符合程序设计意图;
步骤72,根据步骤71收集到的结果,更新调试范围和失效描述,并将控制转移到步骤2或步骤3。
8.如权利要求7所述的动态断点的自动生成方法,其特征在于,所述步骤72还包括:
步骤81,对于步骤72集合中的所有表达式在断点处的计算结果均符合设计预期的情况,提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回步骤3;
步骤82,对于步骤72其中至少有一个表达式的计算结果不符合程序设计意图的情况,提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述,然后返回步骤2。
9.一种动态断点的自动生成系统,其特征在于,包括:
创建动态依赖图模块,用于在程序执行过程中,利用动态插桩技术,收集程序语句的执行实例,实例之间的执行顺序以及依赖关系,依此创建动态依赖图;
精化调试范围模块,用于利用程序动态切片技术,提取动态依赖图与程序失效描述相关的部分;
构建状态流程图模块,用于将精化调试范围模块输出的动态依赖图中的结点和边互换,将调试范围转化成状态流程图;
生成动态断点模块,用于生成动态断点以及断点处需要检查的表达式的集合;
收集调试反馈模块,用于收集用户对所提供的断点以及断点处需要检查的表达式的集合的判断结果,根据该判断结果,更新调试范围和失效描述,并将控制转移到构建状态流程图模块或精化调试范围模块。
10.如权利要求9所述的动态断点的自动生成系统,其特征在于,所述创建动态依赖图模块还包括:
动态插柱模块,用于动态插桩技术通过在程序执行过程中在线的插入记录代码,收集用户所关注的动态执行信息,所述动态执行信息为所执行的语句实例,以及其中每个变量的值;
依赖关系模块,用于动态依赖分析技术将依据所述动态执行信息,分析程序执行过程中的动态依赖关系,所述动态依赖关系为动态数据依赖关系和动态控制依赖关系。
11.如权利要求10所述的动态断点的自动生成系统,其特征在于,所述依赖关系模块还包括:
控制依赖模块,用于分析动态控制依赖关系时,语句实例s动态控制依赖于语句实例t,当且仅当,执行轨迹上存在一条从t到s的路径,s后控制该路径上除t之外的所有结点,但不后控制t;
数据依赖模块,用于分析动态数据依赖时,语句实例s动态数据依赖于t,当且仅当,t定义了变量a的一个实例,s使用了该实例,并且从t到s的路径上没有对该实例的定值。
12.如权利要求9所述的动态断点的自动生成系统,其特征在于,所述精化调试范围模块还包括:
失效描述模块,用于读取由用户指定程序失效描述;
范围提取模块,用于对于程序失效描述中的每个二元组<var,inst>,采用动态程序切片技术,从动态依赖图中提取变量var的第inst个实例所直接或间接依赖的所有语句实例的集合,共同构成新一轮迭代的调试范围;
映射模块,用于将调试范围映射成动态依赖图的一个子图。
13.如权利要求9所述的动态断点的自动生成系统,其特征在于,所述构建状态流程图模块还包括:
执行状态模块,用于有向图中的结点对应程序执行过程中的状态,结点间的有向边代表状态迁移;
约束条件模块,用于有向边上的标签代表决定从边的源点指代到状态到边的终点指代的状态之间迁移的一个约束条件,一个新状态的产生由其所有入边上的约束条件共同决定。
14.如权利要求9所述的动态断点的自动生成系统,其特征在于,所述生成动态断点模块还包括:
最小割集模块,用于计算状态流程图的最小割集;割是状态流程图的一个划分,划分产生两个结点集合,属于不同结点集合的结点互不连通;割的大小为跨越它的所有有向边的数量,上述有向边的集合称为该图的割集,其中,包含有向边数量最少的割集称为该图的最小割集;
断点位置模块,用于在将生成的最小割集映射成断点时,选择上述割集中边的源点在执行轨迹上对应的位置作为断点的位置;用于如果割集中,边的源点不唯一,则选择其中执行顺序最靠后的点在执行轨迹上的位置作为断点位置;
表达式模块,用于将最小割集中各边上的标签构成的集合作为断点位置上需要检查的表达式集合。
15.如权利要求9所述的动态断点的自动生成系统,其特征在于,所述收集调试反馈模块还包括:
判断结果模块,用于收集用户对断点处表达式集合的判断结果,判断结果分为两种:1、集合中的所有表达式在断点处的计算结果均符合设计预期;2、其中至少有一个表达式的计算结果不符合程序设计意图;
范围更新模块:用于根据判断结果模块收集到的结果,更新调试范围和失效描述,并将控制转移到构建状态流程图模块或精化调试范围模块。
16.如权利要求15所述的动态断点的自动生成系统,其特征在于,所述范围更新模块还包括:
后断点轨迹模块,用于对于判断结果模块集合中的所有表达式在断点处的计算结果均符合设计预期的情况,提取当前动态依赖图位于断点之后的部分,作为新的调试范围,并返回构建状态流程图模块;
前断点轨迹模块,用于对于判断结果模块其中至少有一个表达式的计算结果不符合程序设计意图的情况,提取当前动态依赖图上位于断点之前的部分,并根据调试人员列出的错误表达式更新失效描述,然后返回精化调试范围模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210447321.7A CN102968369B (zh) | 2012-03-23 | 2012-11-09 | 一种动态断点的自动生成方法及系统 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210080944.5 | 2012-03-23 | ||
CN201210080944 | 2012-03-23 | ||
CN201210447321.7A CN102968369B (zh) | 2012-03-23 | 2012-11-09 | 一种动态断点的自动生成方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102968369A true CN102968369A (zh) | 2013-03-13 |
CN102968369B CN102968369B (zh) | 2015-02-04 |
Family
ID=47798521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210447321.7A Active CN102968369B (zh) | 2012-03-23 | 2012-11-09 | 一种动态断点的自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102968369B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140373027A1 (en) * | 2013-06-14 | 2014-12-18 | Microsoft Corporation | Application lifetime management |
CN104731654A (zh) * | 2015-04-03 | 2015-06-24 | 南京大学 | 一种针对安卓应用的迁移重构及支持系统 |
CN106886490A (zh) * | 2016-12-30 | 2017-06-23 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN108984402A (zh) * | 2018-07-05 | 2018-12-11 | 北方工业大学 | 一种去除完美理解假设的软件故障定位系统 |
CN109582561A (zh) * | 2018-10-16 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 一种在线可视化编程的调试方法及装置 |
CN109634561A (zh) * | 2018-10-16 | 2019-04-16 | 阿里巴巴集团控股有限公司 | 一种在线可视化编程方法及装置 |
CN110597846A (zh) * | 2019-09-18 | 2019-12-20 | 金瓜子科技发展(北京)有限公司 | 一种ksql处理方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030149961A1 (en) * | 2002-02-07 | 2003-08-07 | Masaki Kawai | Apparatus, method, and program for breakpoint setting |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
CN102187340A (zh) * | 2011-04-14 | 2011-09-14 | 华为技术有限公司 | 断点信息管理方法和断点信息管理器 |
-
2012
- 2012-11-09 CN CN201210447321.7A patent/CN102968369B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030149961A1 (en) * | 2002-02-07 | 2003-08-07 | Masaki Kawai | Apparatus, method, and program for breakpoint setting |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
CN102187340A (zh) * | 2011-04-14 | 2011-09-14 | 华为技术有限公司 | 断点信息管理方法和断点信息管理器 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140373027A1 (en) * | 2013-06-14 | 2014-12-18 | Microsoft Corporation | Application lifetime management |
CN104731654A (zh) * | 2015-04-03 | 2015-06-24 | 南京大学 | 一种针对安卓应用的迁移重构及支持系统 |
CN104731654B (zh) * | 2015-04-03 | 2018-03-27 | 南京大学 | 一种针对安卓应用的迁移重构及支持系统 |
CN106886490A (zh) * | 2016-12-30 | 2017-06-23 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN106886490B (zh) * | 2016-12-30 | 2019-09-20 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN108984402A (zh) * | 2018-07-05 | 2018-12-11 | 北方工业大学 | 一种去除完美理解假设的软件故障定位系统 |
CN109582561A (zh) * | 2018-10-16 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 一种在线可视化编程的调试方法及装置 |
CN109634561A (zh) * | 2018-10-16 | 2019-04-16 | 阿里巴巴集团控股有限公司 | 一种在线可视化编程方法及装置 |
CN109582561B (zh) * | 2018-10-16 | 2022-02-08 | 创新先进技术有限公司 | 一种在线可视化编程的调试方法及装置 |
CN109634561B (zh) * | 2018-10-16 | 2022-03-04 | 创新先进技术有限公司 | 一种在线可视化编程方法及装置 |
CN110597846A (zh) * | 2019-09-18 | 2019-12-20 | 金瓜子科技发展(北京)有限公司 | 一种ksql处理方法和装置 |
CN110597846B (zh) * | 2019-09-18 | 2022-04-08 | 金瓜子科技发展(北京)有限公司 | 一种ksql处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102968369B (zh) | 2015-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102968369A (zh) | 一种动态断点的自动生成方法及系统 | |
CN103559122B (zh) | 基于程序行为切片的测试案例约减方法 | |
CN101739339B (zh) | 一种基于程序动态依赖关系的软件故障定位方法 | |
CN102831056B (zh) | 一种基于修改影响分析的回归测试用例生成方法 | |
US9594543B2 (en) | Activity diagram model-based system behavior simulation method | |
CN103713933B (zh) | 计算机程序中热点函数、变量的汇聚方法、装置及系统 | |
CN103473400A (zh) | 基于层次依赖建模的软件fmea方法 | |
CN109858195A (zh) | 一种sram型fpga上必要位单粒子翻转故障的在线仿真系统 | |
CN105335246B (zh) | 一种基于问答网站分析的程序崩溃缺陷自动修复方法 | |
CN109359038B (zh) | 一种基于Qt和Lua组合实现组态测试系统、实现方法及设备 | |
US20090089758A1 (en) | Testing and debugging of dynamic binary translation | |
CN109521960A (zh) | 数据读写方法、装置和系统 | |
CN108876283A (zh) | 一种自动审核系统及方法 | |
CN103034553B (zh) | 一种报表设计器智能验证的算法、方法及装置 | |
CN103970654B (zh) | 一种软件可靠性虚拟测试方法 | |
CN102521130B (zh) | 一种基于聚类不变式分析的错误定位方法 | |
CN102446134B (zh) | 一种实现编译器错误的自动定位方法和装置 | |
CN103617119A (zh) | 基于语句交互覆盖的回归测试用例选择方法 | |
CN101894073B (zh) | 基于控制流交集的缺陷自动定位装置及其自动定位方法 | |
Wolf et al. | Intervals in software execution cost analysis | |
CN105468521A (zh) | 一种基于子图搜索的指针相关语义错误定位方法 | |
CN105468530A (zh) | 一种基于有限状态机的程序错误检测方法及系统 | |
Luo et al. | Clustering and tailoring user session data for testing web applications | |
Vargas et al. | Optimizing HW/SW codesign towards reliability for critical-application systems | |
Gannon et al. | Using perturbation tracking to compensate for intrusion in message-passing systems |
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 |