CN110187884A - 一种多线程应用场景下的访存指令插桩优化方法 - Google Patents
一种多线程应用场景下的访存指令插桩优化方法 Download PDFInfo
- Publication number
- CN110187884A CN110187884A CN201910483083.7A CN201910483083A CN110187884A CN 110187884 A CN110187884 A CN 110187884A CN 201910483083 A CN201910483083 A CN 201910483083A CN 110187884 A CN110187884 A CN 110187884A
- Authority
- CN
- China
- Prior art keywords
- instruction
- load
- address
- pitching pile
- relationship
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种多线程应用场景下的访存指令插桩优化方法,是通过基于程序中间代码的静态分析过程从而剔除对涉及非共享内存的访存指令的冗余插桩,该方法具体包括:1、获取中间代码;2、遍历所有模块,函数,基本块及指令;3、获取指令相关信息,根据相应规则更新并记录冗余/非冗余插桩的区分信息;4、根据已记录的区分信息,对访存指令进行选择性插桩。本发明能解决传统访存指令插桩方法中的插桩冗余问题,达到降低访存指令插桩规模及插桩引入的运行时开销的目的。
Description
技术领域
本发明属于访存行为监控中的性能优化技术领域,具体地说是一种多线程应用场景下的访存指令插桩优化方法。
背景技术
在各类面向多线程程序的应用场景下,监控程序的访存行为至关重要。例如:并发漏洞的检测就依赖于对程序访问共享内存行为的追踪及分析。插桩是一种可用于抓取访存信息的有效手段,通过在源程序中插入“探针”(通常是包含函数调用的代码段),并通过探针的执行抛出程序运行时的特征信息(此处特指访存行为信息),从而实现运行阶段的访存行为信息的记录及分析。然而,冗余的指令插桩导致桩函数在运行阶段被多次调用,使得插桩技术在提供监控精准性的同时也引入了严重的性能开销问题。
目前,实际应用的用于降低插桩开销的方法多集中于以所有访存指令为对象使用采样技术直接降低插桩的访存指令规模。然而采样方法通常需要在精准性和性能开销间做出权衡,因而可能在降低插桩开销的同时导致精准性出现下降。并且,采样策略通常依赖于具体任务,部分采样方法还需要额外的硬件平台支持,因此在一定程度上缺乏通用性。
发明内容
本发明是为避免上述现有技术所存在的不足之处,提供一种多线程应用场景下的访存指令插桩优化方法,以期通过一套通用的基于程序中间代码的静态分析流程,能有效剔除对涉及非共享内存的访存指令的插桩,从而在不影响监控精准性的同时降低插桩的访存指令规模,并进一步降低插桩引入的运行时开销。
本发明为解决技术问题采用如下技术方案:
本发明一种多线程应用场景下的访存指令插桩优化方法的特点是按如下步骤进行:
步骤1:编译源程序,获取中间代码;
步骤2:遍历所述中间代码所包含的模块,从所有模块中获取所有函数,再从所有函数中获取所有基本块,并对所有基本块中所包含的指令逐一均执行步骤3和步骤4;
步骤3:获取当前指令的相关信息,包括:指令类型、指令的操作数以及操作数类型;
步骤4:根据所述指令类型,利用相应的指令更新规则更新冗余/非冗余插桩的区分信息,并进行选择性插桩操作。
本发明所述的一种多线程应用场景下的访存指令插桩优化方法的特点也在于:所述冗余/非冗余插桩的区分信息具体为“指向关系”与“指向状态”;
所述“指向关系”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,其中,“&”表示取地址符号,则表示对象a和对象b间存在指向关系,包括:
若对象b为非指针对象,则表示对象a为一级指针,并将对象a和对象b间的指向关系定义为“NP←P”关系,其中“←”表示指向符号;
若对象b为指针对象,则表示对象a为多级指针,并将对象a和对象b间的指向关系定义为“P←P”关系;
所述“指向状态”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,且对象a和对象b间存在的指向关系为“NP←P”关系,则按如下方式定义对象b的指向状态:
若对象b指向栈对象,则定义对象b的指向状态为false,否则定义对象b的指向状态为true。
所述步骤4是按如下过程进行:
若当前指令的指令类型为ALLOC类型,则执行更新规则1;
所述更新规则1为:
若当前ALLOC指令分配的是一个指针对象,则将相应的指针对象加入映射集合PointerValue中,并将相应指针对象的指向状态初始化为true,否则将当前ALLOC指令分配的非指针对象加入指令集合StackValue中;其中,所述映射集合PointerValue是指“NP←P”关系及指向状态的映射集合;所述指令集合StackValue是指非感兴趣的指令集合;
若当前指令的指令类型为GEP类型,则执行更新规则2;
所述更新规则2包括:
步骤2a:若当前GEP指令从栈上的一维数组中加载一个非指针对象,则将所加载的非指针对象加入指令集合StackValue中;否则,执行步骤2b;
步骤2b:若当前GEP指令从多维数组中加载一个指针对象,则执行步骤2c;否则,不执行任何操作;
步骤2c:判断加载地址是否属于映射集合PointerValue;若属于,则将加载的指针对象加入指令集合StackValue中,并令所加载的指针对象的指向状态与加载地址的指向状态保持一致;否则,将加载地址加入映射集合PointerValue中,并将加载地址的指向状态初始化为true;
若当前指令的指令类型为LOAD类型,则执行更新规则3;
所述更新规则3包括:
步骤3a:若当前LOAD指令加载的对象与加载地址间存在“NP←P”关系,则将加载的对象加入指令集合StackValue后,执行步骤3b,否则,执行步骤3c;
步骤3b:判断加载地址是否属于指令集合StackValue,若属于,则不执行插桩操作,否则返回加载地址,用于执行当前指令的插桩操作;
步骤3c:判断加载的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤3d,否则,执行步骤3e;
步骤3d:判断加载地址是否属于指令集合PointerValue或加载地址的指向状态是否为true,若是,则不做任何更新操作,否则,将加载对象加入指令集StackValue中;
步骤3e:判断加载地址是否存在于映射集合PointerChain中,若是,则执行步骤3f,否则,执行步骤3i;
步骤3f:获取加载地址原有指向的指针对象,若原有指向的指针对象存在于映射集合PointerChain中,则执行步骤3g,否则,执行步骤3h;其中,所述映射集合PointerChain是指“P←P”关系的映射集合;
步骤3g:使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系、指向状态均保持一致;
步骤3h:若加载地址原有指向的对象存在于映射集合PointerValue中,则使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系保持一致;否则将当前LOAD指令加载的对象的指向状态置为true;
步骤3i:将当前LOAD指令加载的对象的指向状态置为true;
若当前指令的指令类型为STORE类型,则执行更新规则4;
所述更新规则4包括:
步骤4a:若存储对象与存储地址间存在“NP←P”关系,则执行步骤4b,否则,执行步骤4c;
步骤4b:判断存储地址是否属于指令集合StackValue,若是,则不执行插桩操作,否则,返回存储地址,用于执行当前指令的插桩操作;
步骤4c:判断存储的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤4d,否则,执行步骤4f;
步骤4d:若存储对象属于指令集合StackValue,将存储地址的指向状态置为false,否则,执行步骤4e;
步骤4e:判断存储对象是否存在于映射集合PointerValue中,若是,则使存储地址的指向状态与存储对象的指向状态保持一致,否则,将存储地址的指向状态置为true;
步骤4f:判断存储对象是否存在于映射集合PointerValue中,若是,则执行步骤4g,否则,将存储对象的指向状态置为true后,再执行步骤4g;
步骤4g:在映射集合PointerChain中记录存储地址与存储对象的映射关系,并且使存储地址的指向关系与存储对象的指向关系保持一致。
与已有技术相比,本发明有益效果体现在:
1、由于本发明仅将涉及栈对象的访存指令作为非感兴趣指令并保存在相应的非感兴趣指令集合StackValue中,因此仅是滤除对涉及非共享内存的访存指令的插桩,这使得本发明在减少插桩指令的规模下不会影响监控的精准性;
2、由于涉及非共享内存的访存指令通常在程序的访存指令集合中占有极大的比重,因此本发明通过滤除掉对这部分指令的插桩可以有效地降低插桩指令的规模,并进一步降低了插桩引入的运行时开销;
3、由于本发明定义了“指向关系”、“指向状态”及指令类型相关的指令更新规则,从而提供一种通用的任务无关的静态分析方法,使得本发明具备较高的可扩展性,用户可基于此发明进行进一步的定制化的插桩优化;
4、由于本发明是基于对编译源程序所获取的中间代码的静态分析实现插桩优化,而中间代码除了可通过编译源程序所得,还可通过特定工具转换二进制文件所得,使得其既不依赖于特定的硬件平台也不依赖于源文件,具有较高的通用性;
具体实施方式
本实施例中,一种多线程应用场景下的访存指令插桩优化方法是通过基于程序中间代码的静态分析过程,剔除对涉及非共享内存的访存指令的冗余插桩,具体地说,是按如下步骤进行:
步骤1:基于开源的LLVM编译器框架,编译源程序,获取与平台无关的中间代码;
步骤2:遍历中间代码所包含的模块,从所有模块中获取所有函数,再从所有函数中获取所有基本块,并对所有基本块中所包含的指令逐一均执行步骤3和步骤4;
步骤3:基于LLVM的指令类型系统及提供的接口getOperand()与isPointerOperand()等获取当前指令的相关信息,包括:指令类型、指令的操作数以及操作数类型;
步骤4:根据指令类型,利用相应的指令更新规则更新冗余/非冗余插桩的区分信息,并进行选择性插桩操作。
其中,冗余/非冗余插桩的区分信息具体为“指向关系”与“指向状态”;
“指向关系”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,其中,“&”表示取地址符号,则表示对象a和对象b间存在指向关系,包括:
若对象b为非指针对象,则表示对象a为一级指针,并将对象a和对象b间的指向关系定义为“NP←P”关系;其中“←”表示指向符号;
若对象b为指针对象,则表示对象a为多级指针,并将对象a和对象b间的指向关系定义为“P←P”关系;
“指向状态”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,且对象a和对象b间存在的指向关系为“NP←P”关系,则按如下方式定义对象b的指向状态:
若对象b指向栈对象,则定义对象b的指向状态为false,否则定义对象b的指向状态为true。
指令更新规则为:
定义非感兴趣的对象集合为StackValue,记录NP←P关系及指向状态的映射集合为PointerValue,记录P←P关系的映射集合为PointerChain;
ALLOC类型指令遵循更新规则1,GEP类型指令遵循更新规则2,LOAD类型指令遵循更新规则3,STORE类型指令遵循更新规则4;
若当前指令的指令类型为ALLOC类型,则执行更新规则1为:
若当前ALLOC指令分配的是一个指针对象,则将相应的指针对象加入映射集合PointerValue中,并将相应指针对象的指向状态初始化为true,否则将当前ALLOC指令分配的非指针对象加入指令集合StackValue中;
若当前指令的指令类型为GEP类型,则执行更新规则2,包括:
步骤2a:若当前GEP指令从栈上的一维数组中加载一个非指针对象,则将所加载的非指针对象加入指令集合StackValue中;否则,执行步骤2b;
步骤2b:若当前GEP指令从多维数组中加载一个指针对象,则执行步骤2c;否则,不执行任何操作;
步骤2c:判断加载地址是否属于映射集合PointerValue;若属于,则将加载的指针对象加入指令集合StackValue中,并令所加载的指针对象的指向状态与加载地址的指向状态保持一致;否则,将加载地址加入映射集合PointerValue中,并将加载地址的指向状态初始化为true;
若当前指令的指令类型为LOAD类型,则执行更新规则3,包括:
步骤3a:若当前LOAD指令加载的对象与加载地址间存在“NP←P”关系,则将加载的对象加入指令集合StackValue后,执行步骤3b,否则,执行步骤3c;
步骤3b:判断加载地址是否属于指令集合StackValue,若属于,则不执行插桩操作,否则返回加载地址,用于执行当前指令的插桩操作;
步骤3c:判断加载的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤3d,否则,执行步骤3e;
步骤3d:判断加载地址是否属于指令集合PointerValue或加载地址的指向状态是否为true,若是,则不做任何更新操作,否则,将加载对象加入指令集StackValue中;
步骤3e:判断加载地址是否存在于映射集合PointerChain中,若是,则执行步骤3f,否则,执行步骤3i;
步骤3f:获取加载地址原有指向的指针对象,若原有指向的指针对象存在于映射集合PointerChain中,则执行步骤3g,否则,执行步骤3h;
步骤3g:使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系、指向状态均保持一致;
步骤3h:若加载地址原有指向的对象存在于映射集合PointerValue中,则使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系保持一致;否则将当前LOAD指令加载的对象的指向状态置为true;
步骤3i:将当前LOAD指令加载的对象的指向状态置为true;
若当前指令的指令类型为STORE类型,则执行更新规则4,包括:
步骤4a:若存储对象与存储地址间存在“NP←P”关系,则执行步骤4b,否则,执行步骤4c;
步骤4b:判断存储地址是否属于指令集合StackValue,若是,则不执行插桩操作,否则,返回存储地址,用于执行当前指令的插桩操作;
步骤4c:判断存储的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤4d,否则,执行步骤4f;
步骤4d:若存储对象属于指令集合StackValue,将存储地址的指向状态置为false,否则,执行步骤4e;
步骤4e:判断存储对象是否存在于映射集合PointerValue中,若是,则使存储地址的指向状态与存储对象的指向状态保持一致,否则,将存储地址的指向状态置为true;
步骤4f:判断存储对象是否存在于映射集合PointerValue中,若是,则执行步骤4g,否则,将存储对象的指向状态置为true后,再执行步骤4g;
步骤4g:在映射集合PointerChain中记录存储地址与存储对象的映射关系,并且使存储地址的指向关系与存储对象的指向关系保持一致。
基于上述方法,本发明可以有效地解决冗余插桩问题,从而在不影响监测精准性的前提下降低访存指令插桩所引入的运行时开销。经过试验论证,在不同的编译优化级别下,本发明在公开的测试集NAS Parallel Benchmarks 3.0(包含IS、EP、CG、MG、BT、SP多个测试用例)和Parallelism Benchmark上均能有效地减少插桩的访存指令的规模并进一步降低插桩引入的运行时开销。相较于原始的插桩访存指令规模,在编译优化级别为-O3时(最坏情况),平均的插桩访存指令规模降低了24%;在编译优化级别为-O0时(最好情况),平均的插桩访存指令规模降低了81%。此外,相较于原始的插桩后的程序运行时间,进行插桩优化后的程序的运行时间降低了11%~57%。
Claims (3)
1.一种多线程应用场景下的访存指令插桩优化方法,其特征在于是按如下步骤进行:
步骤1:编译源程序,获取中间代码;
步骤2:遍历所述中间代码所包含的模块,从所有模块中获取所有函数,再从所有函数中获取所有基本块,并对所有基本块中所包含的指令逐一均执行步骤3和步骤4;
步骤3:获取当前指令的相关信息,包括:指令类型、指令的操作数以及操作数类型;
步骤4:根据所述指令类型,利用相应的指令更新规则更新冗余/非冗余插桩的区分信息,并进行选择性插桩操作。
2.根据权利要求1所述的一种多线程应用场景下的访存指令插桩优化方法,其特征在于:所述冗余/非冗余插桩的区分信息具体为“指向关系”与“指向状态”;
所述“指向关系”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,其中,“&”表示取地址符号,则表示对象a和对象b间存在指向关系,包括:
若对象b为非指针对象,则表示对象a为一级指针,并将对象a和对象b间的指向关系定义为“NP←P”关系,其中“←”表示指向符号;
若对象b为指针对象,则表示对象a为多级指针,并将对象a和对象b间的指向关系定义为“P←P”关系;
所述“指向状态”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=&b”的声明语句,且对象a和对象b间存在的指向关系为“NP←P”关系,则按如下方式定义对象b的指向状态:
若对象b指向栈对象,则定义对象b的指向状态为false,否则定义对象b的指向状态为true。
3.根据权利要求2所述的一种多线程应用场景下的访存指令插桩优化方法,其特征在于:所述步骤4是按如下过程进行:
若当前指令的指令类型为ALLOC类型,则执行更新规则1;
所述更新规则1为:
若当前ALLOC指令分配的是一个指针对象,则将相应的指针对象加入映射集合PointerValue中,并将相应指针对象的指向状态初始化为true,否则将当前ALLOC指令分配的非指针对象加入指令集合StackValue中;其中,所述映射集合PointerValue是指“NP←P”关系及指向状态的映射集合;所述指令集合StackValue是指非感兴趣的指令集合;
若当前指令的指令类型为GEP类型,则执行更新规则2;
所述更新规则2包括:
步骤2a:若当前GEP指令从栈上的一维数组中加载一个非指针对象,则将所加载的非指针对象加入指令集合StackValue中;否则,执行步骤2b;
步骤2b:若当前GEP指令从多维数组中加载一个指针对象,则执行步骤2c;否则,不执行任何操作;
步骤2c:判断加载地址是否属于映射集合PointerValue;若属于,则将加载的指针对象加入指令集合StackValue中,并令所加载的指针对象的指向状态与加载地址的指向状态保持一致;否则,将加载地址加入映射集合PointerValue中,并将加载地址的指向状态初始化为true;
若当前指令的指令类型为LOAD类型,则执行更新规则3;
所述更新规则3包括:
步骤3a:若当前LOAD指令加载的对象与加载地址间存在“NP←P”关系,则将加载的对象加入指令集合StackValue后,执行步骤3b,否则,执行步骤3c;
步骤3b:判断加载地址是否属于指令集合StackValue,若属于,则不执行插桩操作,否则返回加载地址,用于执行当前指令的插桩操作;
步骤3c:判断加载的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤3d,否则,执行步骤3e;
步骤3d:判断加载地址是否属于指令集合PointerValue或加载地址的指向状态是否为true,若是,则不做任何更新操作,否则,将加载对象加入指令集StackValue中;
步骤3e:判断加载地址是否存在于映射集合PointerChain中,若是,则执行步骤3f,否则,执行步骤3i;
步骤3f:获取加载地址原有指向的指针对象,若原有指向的指针对象存在于映射集合PointerChain中,则执行步骤3g,否则,执行步骤3h;其中,所述映射集合PointerChain是指“P←P”关系的映射集合;
步骤3g:使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系、指向状态均保持一致;
步骤3h:若加载地址原有指向的对象存在于映射集合PointerValue中,则使当前LOAD指令加载的对象的指向关系与加载地址原有指向的对象的指向关系保持一致;否则将当前LOAD指令加载的对象的指向状态置为true;
步骤3i:将当前LOAD指令加载的对象的指向状态置为true;
若当前指令的指令类型为STORE类型,则执行更新规则4;
所述更新规则4包括:
步骤4a:若存储对象与存储地址间存在“NP←P”关系,则执行步骤4b,否则,执行步骤4c;
步骤4b:判断存储地址是否属于指令集合StackValue,若是,则不执行插桩操作,否则,返回存储地址,用于执行当前指令的插桩操作;
步骤4c:判断存储的指针对象与其指向的对象间的指向关系,若指向关系为“NP←P”关系,则执行步骤4d,否则,执行步骤4f;
步骤4d:若存储对象属于指令集合StackValue,将存储地址的指向状态置为false,否则,执行步骤4e;
步骤4e:判断存储对象是否存在于映射集合PointerValue中,若是,则使存储地址的指向状态与存储对象的指向状态保持一致,否则,将存储地址的指向状态置为true;
步骤4f:判断存储对象是否存在于映射集合PointerValue中,若是,则执行步骤4g,否则,将存储对象的指向状态置为true后,再执行步骤4g;
步骤4g:在映射集合PointerChain中记录存储地址与存储对象的映射关系,并且使存储地址的指向关系与存储对象的指向关系保持一致。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910483083.7A CN110187884B (zh) | 2019-06-04 | 2019-06-04 | 一种多线程应用场景下的访存指令插桩优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910483083.7A CN110187884B (zh) | 2019-06-04 | 2019-06-04 | 一种多线程应用场景下的访存指令插桩优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110187884A true CN110187884A (zh) | 2019-08-30 |
CN110187884B CN110187884B (zh) | 2020-10-27 |
Family
ID=67720341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910483083.7A Active CN110187884B (zh) | 2019-06-04 | 2019-06-04 | 一种多线程应用场景下的访存指令插桩优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110187884B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113138770A (zh) * | 2021-05-21 | 2021-07-20 | 南京大学 | 一种基于符号执行的栈操作二进制代码优化方法和装置 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040073833A1 (en) * | 2002-10-10 | 2004-04-15 | Sun Microsystems, Inc. | Apparatus and methods for redundant management of computer systems |
CN101493767A (zh) * | 2009-01-20 | 2009-07-29 | 中国科学技术大学 | 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法 |
CN101866316A (zh) * | 2010-06-23 | 2010-10-20 | 南京大学 | 一种基于相对冗余测试集约简的软件缺陷定位方法 |
CN101872325A (zh) * | 2010-06-25 | 2010-10-27 | 北京航空航天大学 | 一种基于谓词执行序列的软件动态缺陷定位方法 |
CN102243609A (zh) * | 2011-06-15 | 2011-11-16 | 惠州运通信息技术有限公司 | 一种基于嵌入式软件的测试分析方法及系统 |
US20140236564A1 (en) * | 2013-02-20 | 2014-08-21 | International Business Machines Corporation | Coverage model and measurements for partial instrumentation |
CN109634851A (zh) * | 2018-11-30 | 2019-04-16 | 苏州洞察云信息技术有限公司 | 一种系统级实时获取被测程序内部运行数据的方法 |
-
2019
- 2019-06-04 CN CN201910483083.7A patent/CN110187884B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040073833A1 (en) * | 2002-10-10 | 2004-04-15 | Sun Microsystems, Inc. | Apparatus and methods for redundant management of computer systems |
CN101493767A (zh) * | 2009-01-20 | 2009-07-29 | 中国科学技术大学 | 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法 |
CN101866316A (zh) * | 2010-06-23 | 2010-10-20 | 南京大学 | 一种基于相对冗余测试集约简的软件缺陷定位方法 |
CN101872325A (zh) * | 2010-06-25 | 2010-10-27 | 北京航空航天大学 | 一种基于谓词执行序列的软件动态缺陷定位方法 |
CN102243609A (zh) * | 2011-06-15 | 2011-11-16 | 惠州运通信息技术有限公司 | 一种基于嵌入式软件的测试分析方法及系统 |
US20140236564A1 (en) * | 2013-02-20 | 2014-08-21 | International Business Machines Corporation | Coverage model and measurements for partial instrumentation |
CN109634851A (zh) * | 2018-11-30 | 2019-04-16 | 苏州洞察云信息技术有限公司 | 一种系统级实时获取被测程序内部运行数据的方法 |
Non-Patent Citations (1)
Title |
---|
FEI PENG: "SEntre A Dynamic Binary Instrumentation Infrastructure", 《2011 INTERNATIONAL CONFERENCE ON ELECTRONICS,COMMUNICATIONS AND CONTROL》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113138770A (zh) * | 2021-05-21 | 2021-07-20 | 南京大学 | 一种基于符号执行的栈操作二进制代码优化方法和装置 |
CN113138770B (zh) * | 2021-05-21 | 2022-04-22 | 南京大学 | 一种基于符号执行的栈操作二进制代码优化方法和装置 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN116775127B (zh) * | 2023-05-25 | 2024-05-28 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110187884B (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9274923B2 (en) | System and method for stack crawl testing and caching | |
EP2442230B1 (en) | Two pass automated application instrumentation | |
US20110138363A1 (en) | Combining method parameter traces with other traces | |
US20120131559A1 (en) | Automatic Program Partition For Targeted Replay | |
US9189393B2 (en) | Computer, control method of computer, and recording medium | |
Trahay et al. | Numamma: Numa memory analyzer | |
CN104252402B (zh) | 一种程序调试方法及装置 | |
CN110187884A (zh) | 一种多线程应用场景下的访存指令插桩优化方法 | |
CN106294169B (zh) | 一种基于符号执行虚拟机的数据竞争检测与重放方法 | |
Danalis et al. | PaRSEC in practice: Optimizing a legacy chemistry application through distributed task-based execution | |
CN101493767B (zh) | 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法 | |
Janjusic et al. | Gleipnir: A memory profiling and tracing tool | |
CN103092759A (zh) | 一种嵌入式环境下的代码动态性能剖析器 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN109885489B (zh) | 驱动程序中数据竞争检测方法及装置 | |
EP3635561B1 (en) | Asynchronous operation query | |
Simbürger et al. | The potential of polyhedral optimization: An empirical study | |
Zhang et al. | Understanding the performance of GPGPU applications from a data-centric view | |
CN102033804A (zh) | 辅助内存分析的方法和系统 | |
Park et al. | Scaling data race detection for partitioned global address space programs | |
US9032372B2 (en) | Runtime environment and method for non-invasive monitoring of software applications | |
Qi et al. | Multicoresdk: a practical and efficient data race detector for real-world applications | |
CN114780409A (zh) | 基于程序运行进程的断点设置方法、电子设备和存储介质 | |
Stuart | Profiling Compiled SQL Query Pipelines in Apache Spark | |
Metzger et al. | User-guided dynamic data race detection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |