CN102760095B - 基于静态共享变量识别的动态数据竞争检测方法 - Google Patents
基于静态共享变量识别的动态数据竞争检测方法 Download PDFInfo
- Publication number
- CN102760095B CN102760095B CN201110103794.0A CN201110103794A CN102760095B CN 102760095 B CN102760095 B CN 102760095B CN 201110103794 A CN201110103794 A CN 201110103794A CN 102760095 B CN102760095 B CN 102760095B
- Authority
- CN
- China
- Prior art keywords
- sampling
- shared variable
- function
- fundamental block
- program
- 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.)
- Active
Links
Abstract
本发明公开了一种基于静态共享变量识别的动态数据竞争检测方法,包括:S1:识别待检测程序的共享变量;S2:对所述待检测程序中包含共享变量的基本块进行数据竞争检测插装和采样,得到所述待检测程序经插装和采样后的二进制代码,所述基本块是指一个连续的程序语句序列,控制流从它的开始进入,并从它的末尾离开,中间没有中断或者分支;S3:运行所述二进制代码动态检测所述点检测程序中的数据竞争。本发明对含有共享变量的基本块进行插装和采样,避免了代码膨胀问题,大大减小了系统开销。
Description
技术领域
本发明涉及计算机软件可靠性技术领域,特别涉及一种基于静态共享变量识别的动态数据竞争检测方法。
背景技术
随着底层多核处理器的发展,并发程序越来越受到程序员的欢迎。但是并发程序不仅不易正确编写,而且会出现各种难以调试和重现的软件缺陷。数据竞争是引起并发程序软件缺陷的重要原因之一。数据竞争是指多个线程没有同步保护地访问同一个内存地址,且至少一个访问是写操作。因为其会导致严重的后果,学术界和工业界一直试图找到一种有效的检测方法。
现有的数据竞争检测方式都基于软件插装的方法,主要分为两类:程序运行前的静态插装和程序运行中的动态插装。程序运行前的静态插装工具在程序真正运行前对源代码或者二进制文件进行插装,得到一个插装后的二进制代码,最后按照原始程序的运行方式执行插装程序。程序运行中的动态插装在程序执行的过程中动态插入插装指令,现有的动态插装工具一般采用类似Java虚拟机的即时执行方式,在执行过程中动态翻译执行用户程序指令并插入插装指令。相对于静态插装,动态插装方式的功能更加丰富且方便使用(比如不需要重新编译链接程序,可以监控运行进程等)。现有的广泛使用的插装工具Pin和Valgrind都采用动态插装方式。
对于数据竞争,不管是动态插装方式,还是静态插装方式,都面临着开销和于扰性的问题。在典型应用程序中,不管是串行还是并行程序,内存访问操作数量占的比例都很大,因此数据竞争检测的开销和干扰性主要来源于对于内存操作的插装。最新的研究提出了基于采样的方法,也即不需要插装程序中所有的内存访问,而只以采样的方式插装一部分内存访问操作。对于采样,首先要解决的问题是采样的对象或者粒度。现有的一个方法(参考LiteRace:effective sampling forlightweight data-race detection,PLDI′09 Proceedings of the 2009 ACMSIGPLAN conference on Programming language design andimplementation)采用一个基于函数粒度的采样,也就是针对一个函数,统计其动态执行过程运行的次数,不同函数以不同的概率各自进行采样而不互相干扰。但是其选取函数作为采样粒度并不合适,主要存在下面的问题:
1、采样检查开销增大。程序中大多数的函数都和数据竞争无关,盲目对每个函数检查采样会使检查开销增大。如果某个热点函数中不涉及数据竞争,而基于函数粒度采样的方法每次运行这个函数之前都需要检查采样条件,这会引入额外不必要的开销。如果检查采样的代码实现的不合理,这个开销有时候会达到20%。
2、代码膨胀。一个函数体如果很大,但是真正与数据竞争相关的只是其中的一小部分代码区域,基于函数粒度的采样会复制整个函数,并在复制的函数中加入插装代码,这必然会引起程序代码膨胀,对程序产生干扰。
总之,现有基于函数粒度的采样方法没有考虑并发程序缺陷或者数据竞争的特性。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何以较小的资源开销代价实现动态数据竞争检测。
(二)技术方案
为解决上述技术问题,本发明提供了一种基于静态共享变量识别的动态数据竞争检测方法,包括以下步骤:
S1:识别待检测程序的共享变量;
S2:对所述待检测程序中包含共享变量的基本块进行数据竞争检测插装和采样,得到所述待检测程序经插装和采样后的二进制代码,所述基本块是指一个连续的程序语句序列,控制流从它的开始进入,并从它的末尾离开,中间没有中断或者分支;
S3:运行所述二进制代码动态检测所述待检测程序中的数据竞争。
其中,所述步骤S1具体包括:
S1.1:读取所述待检测程序的源代码,为源代码中的每一个函数建立函数信息,对所有函数根据其调用关系建立一个不完整的函数调用图,不完整的函数调用关系图不包括函数中指针的调用关系;
S1.2:对函数进行上下文敏感的指针分析,并构建完整函数调用图,指针分析的结果为每一个函数建立一个指针别名图。指针别名图的结点代表该函数中可以访问的内存空间,边代表结点之间的指向关系,指针分析还需要建立函数调用者指针和被调用者指针的指向图之间的关系;
S1.3:采用自底向上的方式遍历线程间完整的函数调用图,识别出共享变量。
其中,所述函数信息包括:符号表信息、中间表示结构。
其中,所述步骤S2具体包括:
S2.1:遍历函数中间表示的过程中收集包含共享变量的基本块集合;
S2.2:复制每一个包含共享变量的基本块,并且在基本块中插入采样检查语句,进行基本块采样;
S2.3:编译并链接经插装和采样后的源代码,生成插装和采样后的可执行的二进制代码。
其中,所述步骤S2.2中在复制基本块之前包括步骤S2.2.1:检查一个基本块是否属于某个循环,若是,则复制整个外层循环并插入采样检查语句。
其中,所述步骤S2.2.1之前还包括步骤:比较包含共享变量的基本块数量和函数中总的基本块数量,若两者之间的比例小于预定阈值,则步骤S2.2中不执行步骤S2.2.1,也不复制基本块,而进行函数粒度的采样。
其中,所述预定阈值为:10%。
其中,所述采样方式采用软件采样、突发性采样、可适应的采样及线程敏感采样中的一种或几种。
(三)有益效果
本发明通过对含有共享变量的基本块进行插装和采样,避免了代码膨胀问题,大大减小了系统开销。
附图说明
图1是本发明实施例的一种基于静态共享变量识别的动态数据竞争检测方法的框架设计图;
图2是本发明实施例的一种基于静态共享变量识别的动态数据竞争检测方法流程图;
图3是图1中步骤S2的基于基本块的插装过程示意图;
图4是图1中步骤S2的基于基本块粒度的采样算法;
图5是采用图1中的检测方法的代码大小比较结果;
图6是采用图1中的检测方法的性能比较结果。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
经过研究发现,非死锁类型的并发程序缺陷,比如数据竞争,其发生只与程序中的共享变量相关。基于这个观察,本发明提出了一种基于共享变量识别的动态数据竞争检测方法,如图1所示,为本实施例中方法实现框架,在本实施例中首先利用编译器的过程间分析模块实现了一个静态共享变量识别算法,输出共享变量的识别结果。编译器后端的数据竞争检测插装和采样模块利用共享变量的识别结果,实现了一个基于基本块粒度的数据竞争检测插装和采样方法,最后得到一个插装后的二进制版本。通过运行插装的二进制代码动态检测程序中的数据竞争。具体流程如图2所示,包括:
步骤S101,识别待检测程序的共享变量。该步骤具体包括三个步骤:过程间的指针别名分析;线程间函数调用图构建;识别算法。其中指针别名分析和线程间函数调用图的构建两者在一起完成。最后的识别算法依赖于指针别名分析和线程间函数调用图。
算法首先读入整个程序的源代码,为每一个函数建立后续所需的信息,比如符号表信息,中间表示(Intermediate Representation)结构等。在整个过程间分析的开始阶段,算法需要对所有函数根据其调用关系进行一个不完整的排序(不完整是因为有函数指针的存在),建立一个不完整的函数调用图。接着算法在不完整函数调用的基础上进行一个上下文敏感的指针分析,并在此过程中逐步构建完整函数调用图。指针分析的结果为每一个函数建立一个指针别名图(aliasgraph)(指针别名图的结点代表该函数中可以访问的内存空间,边代表结点之间的指向关系)。指针分析还需要建立函数调用者(caller)和被调用者(callee)指针指向图之间的关系(程序中的两个函数通过参数的传递,返回值和全局变量联系,在指针分析中表现为不同指针别名图中结点的对应关系)。由于共享变量会在不同的线程中被访问,有可能是通过别名访问的,指针别名图是帮助识别共享变量的不同指针别名,而函数调用关系图是帮助分析变量在哪个线程中被访问。最后的识别算法采用一个自底向上的方式遍历线程间函数调用图。在访问一个函数集时,识别算法收集三个集合:线程内部的内存访问集合,子线程的内存访问集合,两者的并集合。算法在向上遍历的过程会根据caller和callee的指针指向图的关系,实例化callee中的内存访问集合,如果callee中一个内存访问在caller的指针指向图中没有一个相应的结点,就说明该内存访问在caller中不可访问,就不需要对其再继续向上实例化。如果遍历时碰到一条线程创建边,需要把子线程最后的并集实例化为父线程中的子线程内存访问集合。按照这个方法,直至分析遍历到main函数停止。
步骤S102,对所述待检测程序中包含共享变量的基本块进行数据竞争检测插装和采样,得到所述待检测程序经插装和采样后的二进制代码,所述基本块是指一个连续的程序语句序列,控制流从它的开始进入,并从它的末尾离开,中间没有中断或者分支。
与一般的静态二进制重写方法实现不同,本发明提出的方法在高层的编译器中实现,也就是在源代码级别实现。这是因为本发明的共享变量识别在编译器中实现,编译器后端可以十分方便地获得共享变量识别结果,实现基本块复制并插入采样检查语句。基本块的复制在编译器后端的过程间分析(编译器将高级语言变成机器码的过程中的中间代码)阶段实现,每个函数已经建立了控制流图(CFG)。简单的基本块复制方法如图3所示,BB6是存在共享变量(cnt)的基本块,若在数据竞争检测中对BB6的每一次执行都进行插装,会导致较大的开销,为避免这种情况,加入一个BB6的副本基本块BB8(插装了cnt的读写)以及预判断模块Sampling_Test_BB,预判断模块可以控制程序以一定的概率执行不被插装的BB6,则程序正常执行;或执行被插装的BB8,则程序被进行数据竞争检测,避免了程序的每一次执行都被插装进行数据竞争检测,降低了开销。算法在遍历函数中间表示过程中首先收集包含共享变量的基本块集合。最后对于每一个包含共享变量的基本块进行复制,并且插入采样检查语句。在复制之前,检查一个基本块是否属于某个循环,若是,则复制整个外层循环并插入采样检查语句。优选地,在检查一个基本块是否属于某个循环之前还包括步骤:比较包含共享变量的基本块数量和函数中总的基本块数量,若两者之间的比例小于预定阈值,优选为10%,则不检查基本块是否属于某个循环,也不复制基本块,而进行函数粒度的采样。
本实施例实现了一个基于基本块的软件采样机制,与LiteRace相似,采样机制支持下面的特性:
1、软件采样,与硬件采样不同,软件采样可以更好地控制采样的粒度和对象。
2、突发性采样突发性(bursty),采样是指一旦采样某个采样对象,可以连续对其采样。这个性质对不常执行代码中的软件缺陷非常有用。比如一个函数和基本块只会被执行很少的次数,这种突发性的采样可以保证这些很少的执行次数都被采样到。
3、可适应的采样,与固定的采样周期不同,可适应的采样会根据采样对象的动态执行频率动态调节采样周期,执行频率高的对象的采样周期较高,而对不常执行的代码则采用较低的采样周期。
4、线程敏感的采样,在多线程程序中,一个采样对象,比如函数或者基本块,可能会被多个线程执行,并且在多个线程中表现出不同的执行特性,这需要对于采样对象能够区别其在的线程环境,即做到线程敏感的采样。
5、基本块粒度的采样与函数粒度采样不同,基于基本块粒度的采样以一个基本块或者代码区域作为采样控制对象。这个是本发明的采样机制和现有其他采样机制不同的地方。
实现上述采样机制的方法如图4所示。算法中,函数SamplingCheck插入在图3中的Sampling Test BB基本块中。对于一个基本块,首先需要一个唯一标识。算法中采用调用Sampling Check函数的返回地址作为需要监控的基本块的唯一标识。算法接着定义了三个线程私有的数组,用来控制实现线程敏感的实现。每一个基本块第一次被执行时都被采样,并且会连续采样nInstr0次,也即实现了一个突发式的采样。在一轮采样(包括连续的nInstr0次采样)结束后,算法根据当前基本块被执行的次数设置下一轮的采样周期,即实现一个可适应的采样。
最后,编译并链接经插装和采样后的源代码,生成插装和采样后的可执行的二进制代码。
步骤S103,运行所述二进制代码动态检测所述点检测程序中的数据竞争。
以下是本发明的基于静态共享变量识别的动态数据竞争检测方法的实验结果分析。
代码大小是指一个程序在经过检测工具静态插装后得到的可执行二进制文件的大小。原始的LiteRace方法在二进制代码上直接插装,其至少会带来1倍的代码大小膨胀。这些代码膨胀包括:复制每一个函数,函数入口的采样检查插装和在复制函数版本中对于内存和同步操作的插装。本发明提出的基于共享变量识别的改进版LiteRace可以有效地解决原始LiteRace的代码膨胀问题。改进版LiteRace的代码大小变化如图5所示。对于图中的四个程序,经过本发明的方法插装,程序最后代码大小平均只增加了13%。相对于原始版LiteRace的至少一倍的代码大小膨胀,本文提出的方法能够有效地减少了代码膨胀,这主要得益于基于基本块粒度的复制和插装,而不需要复制整个函数(更进一步,如果一个函数不包含任何共享变量访问,本文的方法不会对其进行任何插装)。
本发明实现的工具的性能指标是指相对于原始程序的开销。对于原始的LiteRace的性能,本文采用其论文中报告的平均性能28%。对于apache-http和pbzip2,其性能数据如图6所示所示。其中apache-httpd使用2个线程进行测试,pbzip2使用4个线程并且压缩30M的文件。aget的性能为使用四个线程下载本机web服务器上的170M的文件的时间(使用本机上的服务器可以排除网络带来的干扰)。原始性能是指没有经过任何工具插装的原始程序的基础性能。从图中可以看出,在不引入过多的代码膨胀的前提下,本发明的平均开销对于评估的三个程序只有32.3%。相比较原始LiteRace的平均28%的开销,本文提出的方法的开销与其相当。
由实验结果看出本发明相比较现有的方法,主要有下面的优点:
1、插装数量少基于共享变量的信息和其在程序中的精确位置,软件插装只需要插装涉及共享变量的内存操作。传统的数据竞争检测工具和最新的使用采样方法的检测工具都可以利用这个特性,使检测的开销大大降低。
2、采样粒度更易控制对于基于采样的检测方法,通过共享变量的信息,可以更加精确地确定哪些函数包含共享变量访问;更进一步,可以精确地确定哪些代码段或者基本块包含共享变量访问。如果一个函数不包含共享变量访问,检测工具不需要对其插装,这减少了程序中的采样检查点,降低了检测工具的开销。另外一方面,对于包含共享变量访问的函数,基于精确的共享变量访问信息,采样工具可以实现基于基本块或者代码段粒度的采样。因为粒度小,复制的插装代码区域也相应减小,这也解决了现有方法的代码膨胀问题。
基于共享变量识别的检测工具比现有的检测工具因为开销和干扰性小,更容易被程序接受,同时本发明提出的共享变量识别结果还可以被其他类型的并发程序缺陷检测使用。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (6)
1.一种基于静态共享变量识别的动态数据竞争检测方法,其特征在于,包括以下步骤:
S1:识别待检测程序的共享变量;
S2:对所述待检测程序中包含共享变量的基本块进行数据竞争检测插装和采样,得到所述待检测程序经插装和采样后的二进制代码,所述基本块是指一个连续的程序语句序列,控制流从它的开始进入,并从它的末尾离开,中间没有中断或者分支;
S3:运行所述二进制代码动态检测所述待检测程序中的数据竞争;
其中所述步骤S2具体包括:
S2.1:遍历函数中间表示的过程中收集包含共享变量的基本块集合;
S2.2:复制每一个包含共享变量的基本块,并且在基本块中插入采样检查语句,进行基本块采样;
S2.3:编译并链接经插装和采样后的源代码,生成插装和采样后的可执行的二进制代码;
所述步骤S2.2中在复制基本块之前包括:
步骤S2.2.1:检查一个基本块是否属于外层循环,若是,则复制整个外层循环并插入采样检查语句。
2.如权利要求1所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S1具体包括:
S1.1:读取所述待检测程序的源代码,为源代码中的每一个函数建立函数信息,对所有函数根据其调用关系建立一个不完整的函数调用图,不完整的函数调用关系图不包括函数中指针的调用关系;
S1.2:对函数进行上下文敏感的指针分析,并构建完整函数调用图,指针分析的结果为每一个函数建立一个指针别名图,指针别名图的结点代表该函数中可以访问的内存空间,边代表结点之间的指向关系,指针分析还需要建立函数调用者指针和被调用者指针的指向图之间的关系;
S1.3:采用自底向上的方式遍历线程间完整的函数调用图,识别出共享变量。
3.如权利要求2所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述函数信息包括:符号表信息、中间表示结构。
4.如权利要求1所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S2.2.1之前还包括步骤:比较包含共享变量的基本块数量和函数中总的基本块数量,若两者之间的比例小于预定阈值,则步骤S2.2中不执行步骤S2.2.1,也不复制基本块,而进行函数粒度的采样。
5.如权利要求4所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述预定阈值为:10%。
6.如权利要求1或4所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述采样的方式采用软件采样、突发性采样、可适应的采样及线程敏感采样中的一种或几种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110103794.0A CN102760095B (zh) | 2011-04-25 | 2011-04-25 | 基于静态共享变量识别的动态数据竞争检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110103794.0A CN102760095B (zh) | 2011-04-25 | 2011-04-25 | 基于静态共享变量识别的动态数据竞争检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102760095A CN102760095A (zh) | 2012-10-31 |
CN102760095B true CN102760095B (zh) | 2014-11-26 |
Family
ID=47054559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110103794.0A Active CN102760095B (zh) | 2011-04-25 | 2011-04-25 | 基于静态共享变量识别的动态数据竞争检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102760095B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657257B (zh) * | 2013-11-20 | 2017-11-17 | 华为技术有限公司 | 指针分析方法及装置 |
CN103729290A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于共享变量访问频度的采样率决策方法与系统 |
CN103678136B (zh) * | 2013-12-30 | 2015-07-08 | 北京控制工程研究所 | 一种基于控制流的数据竞争误报降低方法 |
CN104077144B (zh) * | 2014-07-07 | 2015-06-03 | 西安交通大学 | 基于多线程程序约束构建的数据竞争检测与证据生成方法 |
CN104090798B (zh) * | 2014-07-08 | 2017-02-15 | 南京大学 | 动静态结合的中断驱动程序数据竞争检测方法 |
CN104978272B (zh) * | 2015-07-08 | 2018-05-18 | 中国科学院软件研究所 | 一种用于数据竞争检测的程序调度方法 |
CN106250245B (zh) * | 2016-07-18 | 2019-05-14 | 电子科技大学 | 一种去除粒子模拟算法并行运算中数据竞争的方法 |
CN106201732B (zh) * | 2016-07-18 | 2019-05-14 | 电子科技大学 | 在粒子模拟算法并行中去除数据竞争的线分配并行方法 |
CN110083538B (zh) * | 2019-04-28 | 2022-09-30 | 西安邮电大学 | 一种并发程序噪声注入方法 |
CN111159022B (zh) * | 2019-12-20 | 2023-05-02 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
CN115794592B (zh) * | 2023-02-10 | 2023-07-04 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101310258A (zh) * | 2005-12-16 | 2008-11-19 | 英特尔公司 | 在软件事务内存系统中保护共享变量 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1244257A3 (de) * | 2001-03-21 | 2004-02-18 | Siemens Aktiengesellschaft | Verfahren und Vorrichtung zur dynamischen Regelung der Ressourcenaufteilung durch eine dynamische Freigaberate |
-
2011
- 2011-04-25 CN CN201110103794.0A patent/CN102760095B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101310258A (zh) * | 2005-12-16 | 2008-11-19 | 英特尔公司 | 在软件事务内存系统中保护共享变量 |
Non-Patent Citations (4)
Title |
---|
MPP 数据并行FORTRAN 汇编代码模拟环境的设计与实现;曾丽芳 等;《国防科技大学学报》;19990225;第21卷(第1期);第80-84页 * |
基于动态二进制翻译的多线程程序数据竞争检测方法研究;徐超;《中国优秀硕士学位论文全文数据库》;20101215;第11-12、18-22、39-46、51-52页 * |
徐超.基于动态二进制翻译的多线程程序数据竞争检测方法研究.《中国优秀硕士学位论文全文数据库》.2010,第11-12、18-22、39-46、51-52页. * |
曾丽芳 等.MPP 数据并行FORTRAN 汇编代码模拟环境的设计与实现.《国防科技大学学报》.1999,第21卷(第1期),第80-84页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102760095A (zh) | 2012-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102760095B (zh) | 基于静态共享变量识别的动态数据竞争检测方法 | |
Horgan et al. | A data flow coverage testing tool for C | |
US8527965B2 (en) | Layered static program analysis framework for software testing | |
US9208057B2 (en) | Efficient model checking technique for finding software defects | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
US7861118B2 (en) | Machine instruction level race condition detection | |
KR20120031834A (ko) | 인스트루먼테이션 장치 및 방법 | |
US7480768B2 (en) | Apparatus, systems and methods to reduce access to shared data storage | |
US20150082284A1 (en) | Method and system for generating a memory trace of a program code executable on a programmable target | |
CN103294596A (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
CN109388573A (zh) | 一种无漏报的中断驱动型程序运行时错误检测方法和系统 | |
CN111736846B (zh) | 一种面向动态分析的源代码插桩改进方法 | |
CN105550575B (zh) | 一种未导出的函数地址和数据结构偏移的获取方法及装置 | |
Sagdeo et al. | Precis: Inferring invariants using program path guided clustering | |
CN107967213B (zh) | 一种航天软件临界资源访问冲突检测方法 | |
US20130152053A1 (en) | Computer memory access monitoring and error checking | |
Molitorisz et al. | Patty: A pattern-based parallelization tool for the multicore age | |
CN112100059B (zh) | 一种c语言的指针类型分析方法 | |
CN115080978A (zh) | 一种基于模糊测试的运行时漏洞检测方法及系统 | |
Moerman et al. | Evaluating the performance of open source static analysis tools | |
WO2021104027A1 (zh) | 代码性能检测方法、装置、设备及存储介质 | |
US20080163180A1 (en) | Dynamic discovery of data segments within instrumented code | |
CN112445492A (zh) | 一种基于antlr4的源码翻译方法 | |
Parsa et al. | Statistical based slicing method for prioritizing program fault relevant statements | |
Liang | AI Empowered Program Performance Analysis |
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 |