当前位置: 首页 > 专利查询>东南大学专利>正文

一种基于并发控制流图的Java并发程序路径剖析方法技术

技术编号:14313051 阅读:44 留言:0更新日期:2016-12-30 13:51
本发明专利技术公布了一种基于并发控制流图的Java并发程序路径剖析方法,通过分析Java源码中的线程内控制流关系和线程间的联系(包括线程的创建和各类同步关系),构建Java并发控制流图;在Java并发控制流图上实施并发路径剖析算法,并按照算法结果对Java源码进行插桩,使得插桩后的源码在执行过程中能够生成并发程序的路径剖析结果。

【技术实现步骤摘要】

本专利技术属于动态程序分析领域,涉及一种基于并发控制流图的Java并发程序路径剖析方法
技术介绍
动态程序分析是基于程序执行的分析技术,所以收集程序的执行信息是动态分析方法不可缺少的一部分。为了高效的收集路径的执行信息,现有技术普遍采用路径编码的方式,将每条路径映射到一个或一组整数,以快速的判断当前执行的路径是否与已执行的某条路径相同,方便的进行执行次数的累加。相应的,为了实现路径的编码,在程序执行之前,首先要对程序进行插桩,在分析程序的控制流图(CFG,control flow graph)的基础上,在程序的相关位置插入一个或多个探针变量的值操作语句及相关的逻辑控制、探针收集等语句。这样当程序每一次执行完毕之后,所收集的路径编码计算结果就唯一确定该次执行的路径。对于单线程程序,在其控制流分析的基础上,现有的技术可以将每条可执行路径编码为一个唯一的非负整数或一串唯一的整数集合;为了实现该种路径编码,在程序中插桩的语句需要随着目标程序的执行而执行,在执行完毕时计算出最终的路径编码。对于并发程序,传统的剖析方法难以实施的困难主要有二:并发程序增加了线程的创建、终止和交互机制,导致控制流结构和执行空间都与单线程程序有很大的不同;并发程序中各个线程交替混合执行,导致探针变量的计算语句也可能发生乱序的情况,难以处理。在实际的Java软件中,并发机制的应用较为广泛,多个线程之间的复杂关系会导致其控制流图执行混乱,因此,针对并发程序的实用剖析方案不可缺少。
技术实现思路
技术问题:本专利技术提供一种其中探针计算与路径编码方式能够保证并发程序中每个线程的执行路径的编码具有唯一性,达到能够精确收集并发程序执行信息的效果的基于并发控制流图的Java并发程序路径剖析方法。技术方案:本专利技术的基于并发控制流图的Java并发程序路径剖析方法,包括如下步骤:步骤1)从Java并发程序源码中获取各个线程内部的控制流结构和线程之间的并发关系;步骤2)首先在各个线程内部的控制流结构的基础之上,按照线程之间的并发关系类型,对不同的并发元素分别做如下处理,最终构建得到并发控制流图:a)对于线程创建关系,增加从线程创建节点到被创建线程入口节点的控制流边;b)对于“通知-阻塞”的线程同步关系,识别同步控制语句,按照每条同步控制语句的含义,删除线程内部因同步而消失的控制流图结构,增加线程之间因同步而出现的控制流图结构,使得并发控制流图正确表示线程中每条语句的执行先后次序;c)对于FutureGet机制的线程同步关系,增加通知节点到被通知节点的控制流边,并被通知节点在线程内部的所有出边;步骤3)在所述步骤2获得的并发控制流图中实施剖析算法,并将所需探针语句插桩到原并发程序中,保证插桩后的并发程序在任意的执行情况下,每个线程的执行轨迹均由唯一的路径编码标识;步骤4)执行插桩后的程序,在程序执行过程中,通过所插桩的探针语句计算路径编码并统计路径频率,作为最终的剖析结果。进一步的,本专利技术方法中,步骤3)中所需探针语句使用多个探针变量,在插桩到原并发程序的过程中按照Java线程ID来动态分配每个线程唯一的探针变量。进一步的,本专利技术方法中,步骤3中的所需探针语句根据全路径剖析法计算得到。本专利技术提出了一种基于并发控制流图的Java并发程序路径剖析方法,主要是在合并多个线程内部控制流图的基础上,通过分析并发相关代码,增加、删除相应的控制流边,以构建并发控制流图,进而在并发控制流图的基础上实施路径剖析方法。有益效果:本专利技术与现有技术相比,具有以下优点:(1)现有的路径剖析技术未能构建线程之间的控制流关系,亦缺乏对并发程序中每个线程的剖析能力。本专利技术由于增加了对线程间创建关系和同步关系等信息的处理,构建了并发控制流图,能够在执行过程中区分每个线程执行过程中和其他线程的不同同步状态,进而使得所编码的路径信息能够包含每个线程的创建、执行和终止,保证了准确剖析并发Java程序的能力。(2)现有的路径剖析技术普遍采用单变量作为探针变量,导致多个线程的探针语句执行互相影响,难以区分。本专利技术方法利用了Java语言的线程ID机制,针对每个线程按照其线程ID动态分配一个特有的探针变量进行编码计算,各个线程之间的执行过程中的路径编码操作互不影响,能够处理并发程序中同时执行的多个线程。即使是由同一段代码创建的不同线程,由于其线程ID不同,故也能够在剖析过程中明确地区分,获取每个线程相应的剖析结果。附图说明图1是本专利技术的体系结构。图2是并发控制流图构造中对线程创建关系的处理示意图。图3是并发控制流图构造中对线程“通知-阻塞”同步关系的处理示意图。图4是并发控制流图构造中对线程“FutureGet”同步关系的处理示意图。图5是示例程序对应的单线程控制流图。图6是针对图5生成的并发控制流图。具体实施方式下面结合实施例和说明书附图对本专利技术作进一步的说明。技术中的探针计算和路径编码是密不可分的两个部分,路径的编码与插桩的探针语句相对应,而探针语句又由所插桩的探针语句在目标程序执行过程中计算得出。精确的路径编码要求任一路径的编码具有唯一性,相应的,不同路径上所执行的的探针语句也必须计算出不同的变量取值。本专利技术方法的基础在于并发控制流图的构建,该图描述了线程内部的控制流关系和线程之间的同步执行关系;在并发控制流图模型上实施相应的探针插桩方法,该方法保证了并发执行路径编码的唯一性,并能够简明的得以实现。一、体系结构图1给出了本方法的体系结构。下面给出几个主要部分的具体说明。1并发控制流分析该部分的功能在于从源代码中获取线程内部的控制流关系和线程之间的同步执行关系等相关信息,以应用于探针插桩方法。在本专利技术中需要的控制流信息主要包括单个方法内部的控制流图、方法之间的调用关系以及线程之间的控制流关系。a)对于线程创建关系,如果存在A线程控制流图中的Ax节点创建了线程B,线程B的入口节点为B1,那么在并发控制流图中增加控制流边(Ax,B1),如图2所示:图左侧是线程A和线程B的控制流图以及A对B的创建关系描述,右侧是相应生成的并发控制流图。b)对于“通知-阻塞”的线程同步关系,通过识别同步控制语句修正并发控制流图。在“通知-阻塞”中通知节点分为4类:(1)继承自Object基类的notify、notifyAll;(2)countdown机制的删减语句;(3)条件变量的signal、signalAll;(4)通过Phaser类实现的arrive通知语句。与通知节点对应的阻塞节点分别为wait,await,await,awaitAdvance。在并发控制流图中,构建与阻塞语句相对应的通知语句节点到该阻塞语句后续执行节点的控制流边,同时在线程内部的控制流结构中删除阻塞语句与其后续执行节点的控制流边,如图3所示(图中含义同图2)。c)对于FutureGet机制的线程同步关系,如果存在A线程控制流图中的Ax节点调用了线程B的get()或join()方法,线程B的出口节点为By,那么在并发控制流图中增加控制流边(By,Ax),并删去A线程控制流图中的Ax节点的出边,如图4所示(图中含义同图2)。2并发路径剖析算法在单个过程的控制流中,探针计算方式需要能够区分不同的路径。传统的单线程路径剖析算法计算方式为:输入控制流本文档来自技高网...
一种基于并发控制流图的Java并发程序路径剖析方法

【技术保护点】
一种基于并发控制流图的Java并发程序路径剖析方法,其特征在于,该方法包括如下步骤:步骤1)从Java并发程序源码中获取各个线程内部的控制流结构和线程之间的并发关系;步骤2)首先在各个线程内部的控制流结构的基础之上,按照线程之间的并发关系类型,对不同的并发元素分别做如下处理,最终构建得到并发控制流图:a)对于线程创建关系,增加从线程创建节点到被创建线程入口节点的控制流边;b)对于“通知‑阻塞”的线程同步关系,识别同步控制语句,按照每条同步控制语句的含义,删除线程内部因同步而消失的控制流图结构,增加线程之间因同步而出现的控制流图结构,使得并发控制流图正确表示线程中每条语句的执行先后次序;c)对于FutureGet机制的线程同步关系,则在并发控制流图中增加通知节点到被通知节点的控制流边,并删去被通知节点在线程内部的所有出边;步骤3)在所述步骤2获得的并发控制流图中实施剖析算法,并将所需探针语句插桩到原并发程序中,保证插桩后的并发程序在任意的执行情况下,每个线程的执行轨迹均由唯一的路径编码标识;步骤4)执行插桩后的程序,在程序执行过程中,通过所插桩的探针语句计算路径编码并统计路径频率,作为最终的剖析结果。...

【技术特征摘要】
1.一种基于并发控制流图的Java并发程序路径剖析方法,其特征在于,该方法包括如下步骤:步骤1)从Java并发程序源码中获取各个线程内部的控制流结构和线程之间的并发关系;步骤2)首先在各个线程内部的控制流结构的基础之上,按照线程之间的并发关系类型,对不同的并发元素分别做如下处理,最终构建得到并发控制流图:a)对于线程创建关系,增加从线程创建节点到被创建线程入口节点的控制流边;b)对于“通知-阻塞”的线程同步关系,识别同步控制语句,按照每条同步控制语句的含义,删除线程内部因同步而消失的控制流图结构,增加线程之间因同步而出现的控制流图结构,使得并发控制流图正确表示线程中每条语句的执行先后次序;c)对于FutureGet机制的线程同步关系,则在并发控制流图中增加通知节点到被通知...

【专利技术属性】
技术研发人员:王璐璐李必信廖力周颖
申请(专利权)人:东南大学
类型:发明
国别省市:江苏;32

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

1