CN108228448B - 一种代码跟踪方法及装置 - Google Patents
一种代码跟踪方法及装置 Download PDFInfo
- Publication number
- CN108228448B CN108228448B CN201611197658.1A CN201611197658A CN108228448B CN 108228448 B CN108228448 B CN 108228448B CN 201611197658 A CN201611197658 A CN 201611197658A CN 108228448 B CN108228448 B CN 108228448B
- Authority
- CN
- China
- Prior art keywords
- function
- injection point
- target
- slicing
- module
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种代码跟踪方法及装置。该方法包括:获取预建立插件采集的数据,所述预建立插件依附在的目标进程上;对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息。本发明实施例通过采用切片的方式将性能热点从海量运行的代码中隔离开,并在测试环境下单独运行,与现有技术先比,无需对现有应用进行任何代码改造,具有跟踪精度高、灵活性强的优点。
Description
技术领域
本发明实施例涉及通信技术领域,具体涉及一种代码跟踪方法及装置。
背景技术
基于J2EE架构的交易应用可以通过JVM Instrumentation(代码仪器)实现运行时代码注入,在不改变程序原貌的前提下有选择地进行代码路径跟踪,并捕获参数和返回值,可以帮助运维人员快速找到性能热点,以快速改善用户体验。目前传统模式的运营商网络核心交易大多基于原生应用实现,如运行在交易中间件CICS或Tuxedo上的C/C++开发的程序,很难在运行时环境中注入代码,监控颗粒度也往往到接口级无法进一步下钻到原生。
面对原生应用,现有的技术手段是通过基本C++代码仪器剖析框架(BasicInstrumentation and Profiling Framework for C++) 实现,通过开发一系列插装代码(C++预处理宏),选择性地与应用程序编译成在一起。一般使用两个宏完成函数名及出入参捕获,包括一个函数入口宏,和函数出口宏,统称为关卡宏。
在实现本发明实施例的过程中,发明人发现C++代码仪器剖析框架有很大缺陷:如代码改造工作量大,对于操作***级组件调用,及一些封装后的动态库无法进一步向下发掘代码路径,性能定位颗粒度只能到函数级,仍不能到具体代码级。
发明内容
本发明实施例的一个目的是解决现有技术在进行代码跟踪的需要大量的代码改造工作,而且跟踪的精度较低。
本发明实施例提出了一种代码跟踪方法,包括:
获取预建立插件采集的数据,所述预建立插件依附在目标进程上;
对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息。
可选的,在对所述目标接口进行切片处理之前,所述方法还包括:
根据获取到的数据获取目标注入点;
将传感器注入所述目标注入点,以获取所述传感器采集的交易中间件接口参数值。
可选的,所述对所述目标接口进行切片处理包括:
根据所述交易中间件接口参数值生成测试用例;
根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。
可选的,所述根据获取到的数据获取目标注入点包括:
选取调用堆栈中最低端的性能热点;
对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性;
若是,则判断函数参数是否可正常序列化和反序列化;
若是,则判断函数参数是否小于预设字节长度阈值;
若是,则选取所述函数对应的注入点作为目标注入点。
可选的,若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;
构建选取的性能热点对应的函数参数的派生类;
对所述派生类进行克隆处理,获取克隆副本;
根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
本发明实施例提出了一种代码跟踪装置,包括:
获取模块,用于获取预建立插件采集的数据,所述预建立插件依附在目标进程上;
分析模块,用于对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
切片模块,用于在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
跟踪模块,用于在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息。
可选的,所述装置还包括:查找模块;
所述查找模块,用于根据获取到的数据获取目标注入点;将传感器注入所述目标注入点,以获取所述传感器采集的交易中间件接口参数值。
可选的,所述切片模块,用于根据所述交易中间件接口参数值生成测试用例;根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。
可选的,所述查找模块,用于选取调用堆栈中最低端的性能热点;对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性;若是,则判断函数参数是否可正常序列化和反序列化;若是,则判断函数参数是否小于预设字节长度阈值;若是,则选取所述函数对应的注入点最为目标注入点。
可选的,所述查找模块,还用于若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;构建选取的性能热点对应的函数参数的派生类;对所述派生类进行克隆处理,获取克隆副本;根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
由上述技术方案可知,本发明实施例提出的代码跟踪方法及装置通过采用切片的方式将性能热点从海量运行的代码中隔离开,并在测试环境下单独运行,与现有技术相比,无需对现有应用进行任何代码改造,具有跟踪精度高、灵活性强的优点。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1示出了本发明一实施例提供的一种代码跟踪方法的流程示意图;
图2示出了本发明一实施例提供的一种代码跟踪方法的原理示意图;
图3示出了本发明一实施例提供的一种代码跟踪方法中选择注入点的流程示意图;
图4a示出了本发明一实施例提供的一种代码跟踪方法中代码切片处理的流程示意图;
图4b示出了本发明一实施例提供的一种代码跟踪方法中调用中间件的流程示意图;
图5a和图5b示出了本发明另一实施例提供的一种代码跟踪方法中调用中间件的流程示意图;
图6示出了本发明一实施例提供的一种代码跟踪装置的结构示意图;
图7示出了本发明另一实施例提供的一种代码跟踪装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图1示出了本发明一实施例提供的一种代码跟踪方法的流程示意图,参见图1,该方法包括如下步骤:
110、获取预建立插件采集的数据,所述预建立插件依附在的生产环境上运行的目标进程上;
需要说明的是,在进行代码跟跟踪时,首先通过JVM代码仪器将插件依附到生产环境运行时的目标进程上;然后,在业务对外开放时,捕获参数和返回值,进而为性能热点分析提供数据上的支持。
120、对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
需要说明的是,基于步骤110中获取的数据,通过预设准则筛确定目标接口;
其中,预设准则可以为根据捕获的参数和返回值对比接口层的传输效率,并根据对比结果从接口层中选取出目标接口。例如:若其中某个接口的传输效率远低于其他接口的传输效率或者是某个接口的传输效率低于预设的阈值,则选取出该接口,并将该接口作为目标接口。
130、在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
需要说明的是,切片处理为在生产环境下从一个代码路径中隔离出来目标程序片段;
140、在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息。
需要说明的是,通过采用切片的方式将选取出的接口与网络隔离,并将隔离出的性能热点对应的程序片段在测试环境中独立运行,以在隔离环境下,获取路径跟踪信息;另外,需要说明的是,为了获取不同的数据,可通过配置日志级别的方式来实现,例如:配置的日志较低,仅实现打印日志;配置日志最高时,为调试级别,可获取接口几乎所有信息,进而可从中提取出路径跟踪信息。
可见,本实施例通过采用切片的方式将性能热点从海量运行的代码中隔离开,并在测试环境下单独运行,与现有技术先比,无需对现有应用进行任何代码改造,具有跟踪精度高、灵活性强的优点。
实施例二
图2示出了本发明一实施例提供的一种代码跟踪方法的原理示意图,参见图2,该方法的原理如下:
210、通过JVM代码仪器将插件依附到生产环境运行时的进程上,捕获参数和返回值,以为查找目标注入点提供数据支持,提高了目标注入点的查找效率;
220、基于插件捕获的参数和返回值,查找获取目标注入点;JVM代码仪器将预定义传感器注入到目标注入点,由传感器捕获交易中间件接口参数值;
230、代码切片程序根据所述交易中间件接口参数值组装、生成测试用例;
240-250、根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。具有较高的业务相似度和匹配度,因此较大程度上提升问题复现的概率。
260、生产隔离中间件因与生产完全隔离开,可以启动DEBUG模式的日志级别进行路径跟踪;
需要说明的是,DEBUG模式对应最大的日志级别,在此模式下,日志将记录调试信息等。
270、基于日志中的中间件代码路径信息进行代码路径匹配分析,获取代码路径;或者,启动会话跟踪执行步骤280;
280、从特定的机器发往数据库的会话也可在数据库上启动会话跟踪,以基于SQL(Structured Query Language)路径信息进行代码路径匹配分析,获取代码路径。
可见,本实施例首先将性能热点缩小到接口层,再通过接口层的函数切片在生产隔离***重新调用,通过启动最大日志级别获取精细的函数运行轨迹。避免了对原生应用的改造,同时问题定位颗粒度能缩小到具体代码行。
实施例三
Web前端***通过调用一些封装接口间接调用交易中间层,这里分成两种技术实现方式:第一、JVM通过交易网关直接调用生产隔离中间件CICS/测试交易中间件Tuxedo;第二、通过企业总线间接调用CICS/Tuxedo。其中,第一种方法包括三个步骤。
参见图3,第一步具体包括:
310、对代码仪器套件获取的调用堆栈进行堆栈分析;
320、在整个调用堆栈上,选取最低端的性能热点;
需要说明的是,越底层的业务实现往往具备更广泛的植入能力,可以覆盖大多数业务场景。如果提示是正在进行的线程等待Object.wait(),其实是在等待同步或异步调用的返回,对路径跟踪意义不大,因此需要经过精细的CPU采样捕获更为底层的接口调用详情,CPU采样即每间隔一个较小的周期(约10ms)对整个线程堆栈进行一次全量扫描,可以找出一些JVM运行过程中极为基础的信息。经过CPU采样后,可以发现最终调用CTG前又封装了多层业务逻辑,该封装的目的是将接口调用参数按固定的格式组织并构建报文。
330、对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性,若是,则执行步骤340;
340、判断函数参数是否可正常序列化和反序列化,若是,则执行步骤350;
350、判断函数参数是否小于预设字节长度阈值,若是,则执行步骤360;
360、选取所述函数对应的注入点作为目标注入点。
若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;构建选取的性能热点对应的函数参数的派生类;对所述派生类进行克隆处理,获取克隆副本;根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
需要说明的是,首先注入点的函数要具备关键的接口信息,如果没有相应接口信息,需要从注入点上下文中寻找;其次参数可以正常序列化及反序列化,确保参数重构后能正常传递给代码切片程序,同时需要确保序列化操作不会造成对象属性的变更;最后,注入点的参数体积不能过大,以避免导出时对运行时环境造成性能压力。因此基于这个原则进行注入点选择。
另外,如果第三方组件对象缺少序列化方法,需要对程序进行改造,不适用于生产环境下紧急故障的排查,因此需要进一步向下搜寻至其他更可靠的注入点。一般通过ECI方式(External CICS Call)调用CICS时,涉及到通信区的概念,即做为出参和入参交换的一个平台,前端应用通过将报文序列化为字节码,发送到通信区COMMAREA,再进一步连接到对应的接口程序,因此这个注入点可以选择连接函数(link),其参数有(程序ID、报文序列化字节码、字节码总长度),通过字节码转换为字串形式传给切片程序。由于通信区总长为固定值31744,如果全部转换为字串会达到124K字节,对生产环境产生较高的I/O,同时一般报文不会占满整个通信区,据统计如果非批量业务,报文使用空间也就在10%-20%左右,因此可以截取大约30%左右的字节码,剩余部分在代码切片程序中补齐。
可见,本实施例通过对传感器注入位置进行判断,确保了传感器注入的安全性、可靠性,对业务***的影响较小。
实施例四
图4b示出了本发明另一实施例提供的一种代码跟踪方法中调用中间件的流程示意图,参见图4b,第二步的其基本思路为:代码切片为一个从生产运行时代码路径完全隔离出来的程序片段,可以独立在生产环境中运行,参见图4a;
具体包括如下:
410、CTG环境准备:由于代码切片是在前端Web层应用中提取的,因此代码切片也需要像生产一样调用一个CTG环境,因此生产隔离环境可以配置一个CTG环境,由Web应用程序远程调用;
420、接受来自生产发送的测试指令,将入参通信区字节码字符串反向重建字节码序列;
430、若字节码长度不足31744,剩余字节码以0补齐;
440、启动ECI调用,包括设置连接的CICS服务名称、用户账号权限、启动一个新的事务、程序连接及提交;
450、记录路径跟踪信息;
需要说明的是,代码切片相对业务的无关,可以将整个业务操作流程任何一个环节单独提取出来运行。隔离环境没有其他业务调用,因此CICS服务日志可以调整为DEBUG级别,以实现对交易中间件详细代码路径的输出。
460、等待事务返回。
可见,代码切片为一个从生产运行时代码路径完全隔离出来的程序片段,可以独立在生产环境中运行,相比其他报文模拟方法有很多优势:如摒弃了其他非性能热点干扰因素,只保留关键的问题点,贴近生产环境,可重现比例较高。传统的报文模拟方式,一个是通过前台业务操作模拟,产生的无效数据量很大;另一种为通过交易中间件调用的参数规格,模拟生成企业总线的报文调用,但很多运营商出于信息安全考虑不会将一些内部业务逻辑暴露在企业总线上,因此后者可实施难度较大。
第一种方法的第三步具体包括:变更类业务,可能生产上无法重现,并且有潜在扰乱业务数据的影响,因此可以优先选择在测试环境模拟,如果无法重现再发送到生产环境。如果是查询类业务可以反复在生产上模拟。对于交易中间件向后调用Oracle的部分可以在Oracle上对来自隔离探测CICS环境的会话启动会话跟踪,具体做法为:创建一个***级触发器,对于任何连接到Schema的会话,启动10046事件,最后输出SQL执行详细时间序列,待会话状态切换至INACTIVE状态后,关闭10046事件。
实施例五
图5a和图5b示出了本发明一实施例提供的一种代码跟踪方法中调用中间件的流程示意图,参见图5a和图5b,第二种方法的基本思想为:若判断获知选取的函数中不存在有效注入点,则构建选取的性能热点对应的函数参数的派生类;对所述派生类进行克隆处理,获取克隆副本;根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。具体如下:
这种情形需要在Web前端应用调用企业总线的入口处放置注入点,通常会遇到下列问题:
1、序列化过程有可能会造成对象属性的改变,造成生产环境下不可逆转的影响,因此使用前需向第三方组件厂商确认。为应对此问题,本提案提出两种思路:1)可以在该注入点上游寻找上下文程序注入点,一般为构建这个参数对象所进行的相关操作予以捕获,类似多个Object.setAttribute(“<ATTR1>”, “<ATTR_VALUE>”)的组装形式;2)在进行注入点参数对象序列化前,克隆一个对象副本,并对此副本进行参数序列化,序列化完成后及时销毁此副本,这要求该对象是可克隆的,因此派生一个克隆类:class ArgumentClonableextends Argument implements Clonable {},并通过cglib去动态定义Redefine,参见图5a。
2、测试用例通常并不能完整模拟一个真实的Web前端***,因此由注入点方法加载的其他配置需要提前确定,如报文的字符编码格式、是否采用安全连接及加密密钥,参见图5b。
可见,本实施例在无有效注入点的情况下,通过对现有参数类派生并增加序列化方法,将参数对象克隆以避免对运行时环境造成干扰。
对于方法实施方式,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施方式并不受所描述的动作顺序的限制,因为依据本发明实施方式,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施方式均属于优选实施方式,所涉及的动作并不一定是本发明实施方式所必须的。
实施例六
图6示出了本发明一实施例提供的一种代码跟踪装置的结构示意图,参见图6,该装置包括:获取模块610、分析模块620、切片模块630以及跟踪模块,其中:
获取模块610,用于获取预建立插件采集的数据,所述预建立插件依附在目标进程上;
分析模块620,用于对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
切片模块630,用于在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
跟踪模块640,用于在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息。
需要说明的是,在执行代码路径跟踪时,获取模块610获取插件采集的数据,并将数据发送至分析模块620,由分析模块620对数据进行性能热点分析,进而将性能热点缩小到接口层,然后分析结果发送至切片模块630,切片模块630对目标接口进行切片处理,以将性能热点对应的程序片段从海量运行的代码中隔离开,并由跟踪模块640将程序片段在测试环境下运行并跟踪,获取路径跟踪信息。
可见,本实施例通过采用切片的方式将性能热点从海量运行的代码中隔离开,并在测试环境下单独运行,与现有技术先比,无需对现有应用进行任何代码改造,具有跟踪精度高、灵活性强的优点。
实施例七
图7示出了本发明另一实施例提供的一种代码跟踪装置的结构示意图,参见图7,与实施例六相比,本实施的装置还包括:查找模块720;
所述查找模块720,用于根据获取到的数据获取目标注入点;将传感器注入所述目标注入点,以获取所述传感器采集的交易中间件接口参数值。其工作原理如下:
选取调用堆栈中最低端的性能热点;对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性;若是,则判断函数参数是否可正常序列化和反序列化;若是,则判断函数参数是否小于预设字节长度阈值;若是,则选取所述函数对应的注入点最为目标注入点。
若若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;构建选取的性能热点对应的函数参数的派生类;对所述派生类进行克隆处理,获取克隆副本;根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
相应地,本实施例中的切片模块740用于根据所述交易中间件接口参数值生成测试用例;根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。
对于装置实施方式而言,由于其与方法实施方式基本相似,所以描述的比较简单,相关之处参见方法实施方式的部分说明即可。
应当注意的是,在本发明的装置的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本发明不受限于此,可以根据需要对各个部件进行重新划分或者组合。
本发明的各个部件实施方式可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本装置中,PC通过实现因特网对设备或者装置远程控制,精准的控制设备或者装置每个操作的步骤。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样实现本发明的程序可以存储在计算机可读介质上,并且程序产生的文件或文档具有可统计性,产生数据报告和cpk报告等,能对功放进行批量测试并统计。应该注意的是上述实施方式对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施方式。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (6)
1.一种代码跟踪方法,其特征在于,包括:
获取预建立插件采集的数据,所述预建立插件依附在目标进程上;
对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息;
在对所述目标接口进行切片处理之前,所述方法还包括:
根据获取到的数据获取目标注入点;
将传感器注入所述目标注入点,以获取所述传感器采集的交易中间件接口参数值;
所述对所述目标接口进行切片处理包括:
根据所述交易中间件接口参数值生成测试用例;
根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。
2.根据权利要求1所述的方法,其特征在于,所述根据获取到的数据获取目标注入点包括:
选取调用堆栈中最低端的性能热点;
对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性;
若是,则判断函数参数是否可正常序列化和反序列化;
若是,则判断函数参数是否小于预设字节长度阈值;
若是,则选取所述函数对应的注入点作为目标注入点。
3.根据权利要求2所述的方法,其特征在于,若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;
构建选取的性能热点对应的函数参数的派生类;
对所述派生类进行克隆处理,获取克隆副本;
根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
4.一种代码跟踪装置,其特征在于,包括:
获取模块,用于获取预建立插件采集的数据,所述预建立插件依附在目标进程上;
分析模块,用于对获取到的数据进行性能热点分析,并根据分析结果确定目标接口;
切片模块,用于在生产环境下,对所述目标接口进行切片处理,提取出性能热点对应的程序片段;
跟踪模块,用于在测试环境下,跟踪处于运行状态的所述程序片段获取路径跟踪信息;
所述装置还包括:查找模块;
所述查找模块,用于根据获取到的数据获取目标注入点;将传感器注入所述目标注入点,以获取所述传感器采集的交易中间件接口参数值;
所述切片模块,用于根据所述交易中间件接口参数值生成测试用例;根据所述测试用例对生产隔离中间件和测试中间件进行业务探测处理,所述业务探测为从现网业务流、数据流提取程序片段。
5.根据权利要求4所述的装置,其特征在于,所述查找模块,用于选取调用堆栈中最低端的性能热点;对选取的性能热点对应的函数进行分析,并根据分析结果判断选取的函数是否具有业务属性;若是,则判断函数参数是否可正常序列化和反序列化;若是,则判断函数参数是否小于预设字节长度阈值;若是,则选取所述函数对应的注入点作为目标注入点。
6.根据权利要求5所述的装置,其特征在于,所述查找模块,还用于若判断获知选取的函数不具有业务属性或者函数参数不可正常序列化和反序列化或者函数参数大于或等于预设字节长度阈值,则判定选取的函数中不存在有效注入点;构建选取的性能热点对应的函数参数的派生类;对所述派生类进行克隆处理,获取克隆副本;根据预加载派生类序列化方法,对克隆副本进行序列化处理获取有效注入点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611197658.1A CN108228448B (zh) | 2016-12-22 | 2016-12-22 | 一种代码跟踪方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611197658.1A CN108228448B (zh) | 2016-12-22 | 2016-12-22 | 一种代码跟踪方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228448A CN108228448A (zh) | 2018-06-29 |
CN108228448B true CN108228448B (zh) | 2021-03-26 |
Family
ID=62657005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611197658.1A Active CN108228448B (zh) | 2016-12-22 | 2016-12-22 | 一种代码跟踪方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108228448B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535539B (zh) * | 2020-04-22 | 2023-07-25 | 网易(杭州)网络有限公司 | 游戏编辑中调试方法、装置、设备及存储介质 |
CN112235128B (zh) * | 2020-09-23 | 2022-12-13 | 建信金融科技有限责任公司 | 一种交易路径分析方法、装置、服务器及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510115A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 使用动态编译器控制程序运行时处理器频率的方法 |
CN102722434A (zh) * | 2012-05-24 | 2012-10-10 | 兰雨晴 | 一种针对Linux进程调度的性能测试方法和工具 |
CN104850411A (zh) * | 2015-06-10 | 2015-08-19 | 清华大学 | 存储***基准评测程序生成方法及装置 |
CN105677550A (zh) * | 2015-12-29 | 2016-06-15 | 广州华多网络科技有限公司 | 一种基于Linux***的性能采集分析的方法、装置及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856726B2 (en) * | 2009-09-14 | 2014-10-07 | The Mathworks, Inc. | Verification of computer-executable code generated from a slice of a model |
-
2016
- 2016-12-22 CN CN201611197658.1A patent/CN108228448B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510115A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 使用动态编译器控制程序运行时处理器频率的方法 |
CN102722434A (zh) * | 2012-05-24 | 2012-10-10 | 兰雨晴 | 一种针对Linux进程调度的性能测试方法和工具 |
CN104850411A (zh) * | 2015-06-10 | 2015-08-19 | 清华大学 | 存储***基准评测程序生成方法及装置 |
CN105677550A (zh) * | 2015-12-29 | 2016-06-15 | 广州华多网络科技有限公司 | 一种基于Linux***的性能采集分析的方法、装置及*** |
Also Published As
Publication number | Publication date |
---|---|
CN108228448A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020119434A1 (zh) | 接口数据处理方法、自动化测试方法、装置、设备和介质 | |
US10185546B2 (en) | Service extraction and application composition | |
CN110941546A (zh) | Web页面用例的自动化测试方法、装置、设备及存储介质 | |
CN106557413A (zh) | 基于代码覆盖率获取测试用例的方法和设备 | |
CN105335287B (zh) | 一种自动化测试方法及装置 | |
CN111475324B (zh) | 日志信息的分析方法、装置、计算机设备和存储介质 | |
CN107003931B (zh) | 将测试验证从测试执行分离 | |
US20110078203A1 (en) | System and method for application navigation | |
CN112579437B (zh) | 一种程序运行过程符合性验证方法 | |
Wang et al. | A model-based framework for cloud API testing | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN108228448B (zh) | 一种代码跟踪方法及装置 | |
CN113158195B (zh) | 一种基于poc脚本的分布式漏洞扫描方法及*** | |
CN111382424A (zh) | 一种基于受控环境的移动应用敏感行为检测方法和*** | |
CN112612697A (zh) | 一种基于字节码技术的软件缺陷测试定位方法及*** | |
CN111813648A (zh) | 一种应用于App的自动化测试方法、装置、存储介质及电子设备 | |
CN116795701A (zh) | 一种接口程序的通用测试实例的生成方法和装置 | |
CN110427287A (zh) | 主板功能测试通用***及其方法 | |
Wang et al. | A model-based behavioral fuzzing approach for network service | |
CN109902012A (zh) | 一种自动化生成服务器测试报告的方法及装置 | |
Amontamavut et al. | Separated Linux process logging mechanism for embedded systems | |
CN115296832B (zh) | 应用服务端的攻击溯源方法及装置 | |
Jin et al. | Dynamic cohesion measurement for distributed system | |
CN117992359B (zh) | 服务化软件的观测方法、装置和电子设备 | |
CN114978937B (zh) | 一种页面数据校验方法及装置 |
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 |