函数调用信息的获取方法及装置、测试设备制造方法及图纸

技术编号:15299794 阅读:330 留言:0更新日期:2017-05-12 02:02
本发明专利技术公开了一种函数调用信息的获取方法及装置、测试设备。其中,该方法包括:在运行待测试的程序的过程中,对程序中待调用的托管函数进行编译,得到非托管函数,对非托管函数进行钩子hook操作,得到第一函数调用信息,根据第一函数调用信息和托管函数的函数名生成第二函数调用信息,输出得到的第二函数调用信息,其中,非托管函数被允许直接运行在CPU上,hook操作用于监控非托管函数在运行时的参数和返回值,第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值,第二函数调用信息中包括具有对应关系的托管函数的函数名、函数进入时间、函数退出时间,函数返回值。本发明专利技术解决了相关技术偶现的crash的技术问题。

Method and device for acquiring function call information and testing equipment

The invention discloses a method and a device for obtaining function call information and a testing device. Among them, the method comprises the following steps: in the process of running test program, the managed function to be invoked in the program compile, get unmanaged functions for the hook hook operation on the unmanaged function, the first function call information, according to the function of the first function call information and the name of the managed function to generate second function calls. Second function call information, output the unmanaged function is allowed to run directly on the CPU, hook operating parameters for monitoring unmanaged functions at runtime and the return value, the first function call information includes at least a function entry time, exit time, function return value, function name, function managed function function second call information including relationship with the entry time, exit time, function return value. The invention solves the technical problem of the crash of the related technology.

【技术实现步骤摘要】

本专利技术涉及通信领域,具体而言,涉及一种函数调用信息的获取方法及装置、测试设备
技术介绍
相关技术中提供了一种可以记录托管代码函数的调用情况的技术方案,利用Mono提供的Profiler(可以理解为是一种分析工具)功能,该功能可以利用Mono提供的mono_profiler_install_enter_leave接口注册两个函数,这两个注册过的回调函数分别会在托管代码里的函数进入和退出的时候被调用,Mono会给这两个回调函数提供一个自定义的数据结构,用来存储可能需要的数据,还会提供一个参数,通过该参数可以获取本次托管代码调用了哪个函数。接口注册好了以后再用Mono提供的mono_profiler_set_events接口设置MONO_PROFILER_ENTER_LEAVE事件,至此,托管代码中运行的所有函数只要一被执行就会调用注册过的两个回调函数。在实际项目中,专利技术人发现使用上述技术方案去记录托管代码函数的调用情况,会发生偶现的crash崩溃现象,直接导致了现有的技术方案不能应用在一些复杂项目中。针对上述的问题,目前尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种函数调用信息的获取方法及装置、测试设备,以至少解决相关技术中采用mono提供的分析工具获取托管函数的调用情况的技术方案,偶现crash现象的技术问题。根据本专利技术实施例的一个方面,提供了一种函数调用信息的获取方法,包括:在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译,得到非托管函数,其中,所述非托管函数被允许直接运行在中央处理器CPU上;对所述非托管函数进行钩子hook操作,得到第一函数调用信息,其中,所述hook操作用于监控所述非托管函数在运行时的参数和返回值,所述第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值;根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息,其中,所述第二函数调用信息中包括具有对应关系的所述托管函数的函数名、函数进入时间、函数退出时间,函数返回值;输出所述第二函数调用信息。根据本专利技术的另一个方面,还提供了一种函数调用信息的获取装置,包括:编译单元,用于在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译;第一确定单元,用于对所述托管函数编译后得到非托管函数,其中,所述非托管函数被允许直接运行在中央处理器CPU上;第二确定单元,用于对所述非托管函数进行钩子hook操作,得到第一函数调用信息,其中,所述hook操作用于监控所述非托管函数在运行时的参数和返回值,所述第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值;生成单元,用于根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息,其中,所述第二函数调用信息中包括具有对应关系的所述托管函数的函数名、函数进入时间、函数退出时间,函数返回值;输出单元,用于输出所述第二函数调用信息。根据本专利技术实施例的另一方面,还提供了一种测试设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器,用于在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译,得到非托管函数,对所述非托管函数进行钩子hook操作,得到第一函数调用信息,根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息,进而输出所述第二函数调用信息,其中,所述非托管函数被允许直接运行在中央处理器CPU上,所述hook操作用于监控所述非托管函数在运行时的参数和返回值,所述第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值,所述第二函数调用信息中包括具有对应关系的所述托管函数的函数名、函数进入时间、函数退出时间,函数返回值。在本专利技术实施例中,通过在运行待测试的程序的过程中,对程序中待调用的托管函数进行编译,得到非托管函数,对非托管函数进行钩子hook操作,得到第一函数调用信息,根据第一函数调用信息和托管函数的函数名生成第二函数调用信息,进而输出得到的第二函数调用信息,通过hook操作技术来得到第一函数调用信息,再得到根据第一函数调用信息和托管函数的函数名生成的第二函数调用信息,从而不会出现crash崩溃现象,进而解决了相关技术中采用mono提供的分析工具获取托管函数的调用情况的技术方案,偶现crash现象的技术问题。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是根据本专利技术实施例的一种可选的函数调用信息的获取方法的应用环境示意图;图2是根据本专利技术实施例的一种可选的函数调用信息的获取方法的流程图;图3为根据本专利技术示例的编译函数的一种流程示意图;图4为根据本专利技术示例的编译函数的另一种流程示意图;图5为根据本专利技术示例的编译函数的又一种流程示意图;图6为根据本专利技术示例的根据函数指针fp监听参数和返回值的流程图;图7为根据本专利技术示例的监控函数调用信息的流程图;图8为根据本专利技术实施例的一种可选的函数调用信息的获取装置的结构框图;图9为根据本专利技术实施例的一种可选的函数调用信息的获取装置的另一结构框图;图10为根据本专利技术实施例的一种可选的第一确定单元的结构框图;图11为根据本专利技术实施例的一种可选的测试设备的结构框图;图12为根据本专利技术实施例的一种可选的产品设备的主界面的示意图;图13为根据本专利技术实施例的一种可选的产品设备的界面示意图;图14为根据本专利技术实施例的另一种可选的产品设备的界面示意图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本专利技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。为了更好的理解本专利技术实施例以下提供的技术方案,本专利技术实施例对实施例中出现的技术术语进行解释说明。手游:手机游戏的简称,相对于PC游戏而言,在手机上运行的游戏。Native代码:也叫非托管代码,指可以直接运行在某一架构的CPU上的指令序列,也可以指代那些可有直接编译成这类指令序列的高级语言,比如C/C++语言,但是像依赖虚拟机运行的java和依赖.Net库运行的就不能理解为是非托管代码。.Net框架:由微软开发的一种采用虚拟机运行的变成平台,以通用语言运行库为基础,支持多种语言(C#,F#,VB.NET,C++,Python等)的开发。托管代码:相对于Native代码的概念本文档来自技高网
...
函数调用信息的获取方法及装置、测试设备

【技术保护点】
一种函数调用信息的获取方法,其特征在于,包括:在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译,得到非托管函数,其中,所述非托管函数被允许直接运行在中央处理器CPU上;对所述非托管函数进行钩子hook操作,得到第一函数调用信息,其中,所述hook操作用于监控所述非托管函数在运行时的参数和返回值,所述第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值;根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息,其中,所述第二函数调用信息中包括具有对应关系的所述托管函数的函数名、函数进入时间、函数退出时间,函数返回值;输出所述第二函数调用信息。

【技术特征摘要】
1.一种函数调用信息的获取方法,其特征在于,包括:在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译,得到非托管函数,其中,所述非托管函数被允许直接运行在中央处理器CPU上;对所述非托管函数进行钩子hook操作,得到第一函数调用信息,其中,所述hook操作用于监控所述非托管函数在运行时的参数和返回值,所述第一函数调用信息至少包括:函数进入时间、函数退出时间,函数返回值;根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息,其中,所述第二函数调用信息中包括具有对应关系的所述托管函数的函数名、函数进入时间、函数退出时间,函数返回值;输出所述第二函数调用信息。2.根据权利要求1所述的方法,其特征在于,在对所述非托管函数进行钩子hook操作之后,且在根据所述第一函数调用信息和所述托管函数的函数名生成第二函数调用信息之前,还包括:根据预先建立的对应关系获取与所述非托管函数的第一函数指针对应的所述托管函数的第二函数指针;通过所述第二函数指针查找到所述托管函数的所述函数名。3.根据权利要求2所述的方法,其特征在于,在对所述非托管函数进行钩子hook操作之后,且在根据预先建立的对应关系获取与所述非托管函数的第一函数指针对应的所述托管函数的第二函数指针之前,还包括:通过执行所述hook操作得到的返回地址获取所述非托管函数的汇编代码;根据所述汇编代码获取所述非托管函数的第一函数指针。4.根据权利要求2所述的方法,其特征在于,在对所述程序中待调用的托管函数进行编译之后,且在根据预先建立的对应关系获取与所述非托管函数的第一函数指针对应的所述托管函数的第二函数指针之前,还包括:建立所述非托管函数的第一函数指针与所述托管函数的第二函数指针之间的所述对应关系,其中,进行所述编译所需的参数包括所述托管函数的第二函数指针,进行所述编译之后所得到的返回值包括所述非托管函数的第一函数指针。5.根据权利要求1至4中任一项所述的方法,其特征在于,对所述非托管函数进行钩子hook操作,得到第一函数调用信息包括:使用预先定义的hook函数对非托管函数进行所述hook操作,其中,所述预先定义的hook函数输入参数包括:需要被hook操作的参数,所述预先定义的hook函数输出参数包括:所述托管函数运行时的参数和返回值,所述预先定义的hook函数,用于监控所述非托管函数在运行时的参数和返回值。6.根据权利要求1至4中任一项所述的方法,其特征在于,对所述程序中待调用的托管函数进行编译,得到非托管函数包括:对所述程序中所有待调用的托管函数进行编译,得到对应的非托管函数。7.一种函数调用信息的获取装置,其特征在于,包括:编译单元,用于在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译;第一确定单元,用于对所述托管函数编译后得到非托管函数,其中...

【专利技术属性】
技术研发人员:黄柳优李源纯姜润知王鹏魏学峰
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

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

1