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上;对所述非托管函 ...
【技术保护点】
一种函数调用信息的获取方法,其特征在于,包括:在运行待测试的程序的过程中,对所述程序中待调用的托管函数进行编译,得到非托管函数,其中,所述非托管函数被允许直接运行在中央处理器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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。