跟踪和调试的方法、装置及系统的制作方法

文档序号:6505645阅读:175来源:国知局
跟踪和调试的方法、装置及系统的制作方法【专利摘要】本发明实施例提出一种跟踪和调试的方法、装置及系统,其方法包括:接收云端发送来的控制指令;根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;将跟踪获得的运行参数通过云端输出给调试监控服务器;接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;运行所述调试命令,对目标应用进行调试;将调试数据通过云端发送给调试监控服务器。通过本发明对目标应用程序进行跟踪与调试,具有操作方便、时间短、效率高、成本低、兼容性强等优点。【专利说明】跟踪和调试的方法、装置及系统【
技术领域
】[0001]本发明涉及移动终端【
技术领域
】,特别涉及一种跟踪和调试的方法、装置及系统。【
背景技术
】[0002]随着移动通信电子技术的发展,如今移动终端已经不单具有远程通话的功能,许多个人电脑上的应用程序功能都可以通过移动终端来实现,如用户可以通过手机的浏览器浏览网页内容、通过手机上播放器播放视频和音乐、通过手机上的文档处理工具编辑文档坐寸ο[0003]目前,移动终端的应用程序出现问题(比如程序崩溃或者出现异常等)的话,如果要对其进行调试,首先要对出错的程序进行跟踪,获得应用程序运行的系统日志文件,并通过当前的环境数据来确定问题所在。以Android(安卓)手机下的应用程序为例,出现问题时一般会通过以下过程跟踪问题:[0004](I)使用Android系统提供的日志API(Applicat1nProgrammingInterface,应用程序编程接口)或者其自身定义的格式输出到日志文件中。为了可以确定问题所在,需要输出尽量详细的日志,跟踪过程中功收集的是所有调用过的入口函数的时间相关的性能参数。[0005](2)使用Android系统提供的Debug类(指排除程序故障的一组对象)实现打开调试跟踪功能。现有的跟踪过程是通过注入并修改系统服务(systenuserver),而非修改程序自身的具体入口函数,需要root权限(超级用户权限,即可以修改系统中的任何文件而不受限制)。[0006](3)如果出现的问题是可预期的Java异常(Java异常是指在Java语言中的异常),则输出其调用栈到日志文件中;[0007](4)如果出现的问题是不可预期的异常(导致程序非预期退出的异常,包括Java异常和Native异常,Native异常是指本地指令执行异常),则查看Android系统所生成的记录文件。[0008](5)日志文件形成后将其上传或者自动上传到指定地方。[0009]根据跟踪获得的环境数据,确定问题所在后,还要准备相关指令调试该问题,比如要重现缺陷、还原混淆的调用栈、断点或单步跟踪各个步骤的各个环境参数。而调试时需要邀请上报问题的用户到开发商,让用户的重现问题并直接在用户的移动终端上调试程序。由于现有的操作系统版本各异,使用的语言也不尽相同,所以在调试时需要让出现异常的移动终端安装可调式的版本。[0010]现有的这种跟踪与调试方法存在以下问题:现有技术在跟踪确定问题所在后,还需要对出现问题的移动终端进行实地调试,过程非常繁琐,若不能邀请到持有问题移动终端的用户到现场进行调试,则需要购买相关移动终端重现问题,调试时间长且费用成本闻;【
发明内容】[0011]本发明实施例的目的是提供一种跟踪和调试的方法、装置及系统,以解决现有的移动终端的跟踪和调试方式调试效率低、时间长,成本高,操作繁琐,容易出错的问题。[0012]本发明实施例提出一种跟踪和调试的方法,包括:[0013]接收云端发送来的控制指令;[0014]根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;[0015]将跟踪获得的运行参数通过云端输出给调试监控服务器;[0016]接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;[0017]运行所述调试命令,对目标应用进行调试;[0018]将调试数据通过云端发送给调试监控服务器。[0019]本发明实施例还提出一种跟踪和调试的装置,包括:[0020]控制指令接收模块,用于接收云端发送来的控制指令;[0021]跟踪模块,用于根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;[0022]运行参数输出模块,用于将跟踪获得的运行参数通过云端输出给调试监控服务器;[0023]调试命令接收模块,用于接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;[0024]调试模块,用于运行所述调试命令,对目标应用进行调试;[0025]调试数据发送模块,用于将调试数据通过云端发送给调试监控服务器。[0026]本发明实施例再提出一种跟踪和调试的系统,包括调试监控服务器、云端及至少一个移动终端,所述移动终端包括跟踪和调试的装置,其中所述跟踪和调试的装置进一步包括:[0027]控制指令接收模块,用于接收云端发送来的控制指令;[0028]跟踪模块,用于根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;[0029]运行参数输出模块,用于将跟踪获得的运行参数通过云端输出给调试监控服务器;[0030]调试命令接收模块,用于接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;[0031]调试模块,用于运行所述调试命令,对目标应用进行调试;[0032]调试数据发送模块,用于将调试数据通过云端发送给调试监控服务器。[0033]相对于现有技术,本发明实施例的有益效果是:[0034]本发明实施例通过云端可以远程控制一个或同时控制多个移动终端的目标程序的运行参数输出,无需对移动终端进行现场调试,跟踪和调试过程方便快捷,节约了时间成本,也节省了因邀请不到用户而购买移动终端所花费的经济成本。【专利附图】【附图说明】[0035]图1为应用本发明实施例方法的基本架构图;[0036]图2为本发明实施例的第一种跟踪和调试的方法的流程图;[0037]图3为本发明实施例的第一种动态跟踪过程的流程图;[0038]图4为本发明实施例的第二种动态跟踪过程的流程图;[0039]图5为本发明实施例的第二种跟踪和调试的方法的流程图;[0040]图6为本发明实施例的一种跟踪和调试的系统的结构图;[0041]图7为本发明实施例的一种跟踪和调试的装置的结构图;[0042]图8为本发明实施例的另一种跟踪和调试的装置的结构图;[0043]图9为本发明实施例的第一种跟踪模块的的结构图;[0044]图10为本发明实施例的第二种跟踪模块的的结构图。【具体实施方式】[0045]有关本发明的前述及其他技术内容、特点及功效,在以下配合参考图式的较佳实施例详细说明中将可清楚的呈现。通过【具体实施方式】的说明,当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图式仅是提供参考与说明之用,并非用来对本发明加以限制。[0046]本发明实施例的跟踪和调试的方法应用于移动终端,请参见图1,其为应用本发明实施例方法的基本架构图,其中:[0047]a)用户——给出问题的缺陷等问题;需要按照终端开发人员的指引进行操作。[0048]b)目标应用程序一目标终端程序必须设置一个选项来开启调试模式,运用本发明实施例的方法进行动态跟踪和调试;一但开启调试,便会接收云端的命令执行之。[0049]c)云端——定义一个或多个协议,用于在目标应用程序与云端之间交换数据,以及云端与终端开发人员之间交互数据,以达到运用本方法进行动态跟踪调试的效果;要求包含若干条跟踪调试用的命令。[0050]d)终端开发人员一开发和调试该目标应用程序的人员,要向用户了解程序的问题,制定相关策略,拟定需要终端执行的指令。以下简称开发人员。[0051]e)跟踪调试环境一终端开发人员通过该环境来下达命令到云端,并从云端获得反馈结果。一般来说,可以与Eclipse等(Eclipse是一个开放源代码的、基于java的可扩展开发平台)开发环境集成在一起。[0052]当目标应用程序的运行发生异常时,用户可以通过上报、论坛发布等方式向开发人员反馈情况,开发人员获知情况后,可以指引用户开启移动终端的网络功能,并打开目标应用程序的调试模式,以利用本发明实施例的方法对目标应用程序进行跟踪和调试。请参见图2,其为本发明实施例的一种跟踪和调试的方法的流程图,其包括以下步骤:[0053]S21,接收云端发送来的控制指令。所述控制指令用来触发对目标应用程序的跟踪函数。[0054]S22,根据所述控制指令动态跟踪目标应用的运行,并获取运行参数。[0055]所述跟踪的目的是通过重现问题来获得程序运行参数。跟踪是只监控程序运行流程中的函数被调用时的情况,包括函数名、调用参数、类名、类成员属性值、附近的一些变量值等。[0056]所述动态跟踪是指在打开用户调试模式的情况下,只要待调试的目标应用程序运行时,自动让云端控制日志输出。[0057]跟踪过程中不进行流程控制的干预。这样有可能运行一次也找不到原因,有可能需要用户多次重现问题。为了减少运算负担,可以在跟踪前将冗余的日志去掉,这样在跟踪结束后所获得的数据是目标应用程序运行过程中的参数,即跟踪获取的是只对问题分析有用的运行参数。[0058]S23,将跟踪获得的运行参数通过云端输出给调试监控服务器。[0059]调试监控服务器收到跟踪获得的运行参数后,开发人员要根据该运行参数找出目标应用程序异常的问题所在,并准备好调试需要用到的调试命令。[0060]S24,接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令。[0061]S25,运行所述调试命令,对目标应用进行调试。[0062]调试用是指边跟踪边控制流程,调试过程中会自动收集数据,一但进入程序并允许调试后,流程控制权归终端开发人员所有,无需用户多次干预。[0063]S26,将调试数据通过云端发送给调试监控服务器。[0064]调试监控服务器收到调试数据后,开发人员会对调试数据进行研究,如果调试数据对解决异常问题已经足够,则调试结束,如果调试数据不足以解决异常问题,则需要调整调整命令重新再对目标应用进行调试。[0065]使用本发明实施例的方法,整个跟踪和调试过程不用修改移动终端操作系统的系统服务,不需要root权限,且通过云端可以远程控制目标程序的运行参数输出,无需对移动终端进行现场调试,跟踪和调试过程方便快捷,节约了时间成本,也节省了因邀请不到用户而购买移动终端所花费的经济成本。[0066]其中,在跟踪过程中,云端用于控制在哪个位置或哪个时间点输出目标程序的运行参数,是整个过程的关键。请参见图3,根据云端输出的控制指令动态跟踪目标应用的运行(步骤S22)又可以进一步包括以下步骤:[0067]S2201,在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。[0068]所述的原函数是指目标应用运行时需要的函数程序,一般来说,原函数多为加法函数。所述入口函数是指程序运行时候最开始调用的函数。所述的入口函数指针是指指向入口函数的入口地址的一个指针变量,其决定了哪一个入口函数是下一时刻所要运行的函数。所述的跟踪函数用于收集目标应用的运行参数。[0069]S2202,执行跟踪函数的逻辑。所述跟踪函数的逻辑是收集当前时刻的环境参数,例如保存/记录/打印当前时刻的系统日志。[0070]S2203,通过跟踪函数还原入口函数指针,并调用原函数。[0071]S2204,在原函数运彳丁完成时,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。[0072]S2205,执行跟踪函数的逻辑,实现对原函数运行参数的记录。[0073]由于在原函数开始运行之前以及运行完成后,分别调用一次跟踪函数来记录原函数运行前后的环境参数,因而通过结合跟踪函数两次收集的数据,就可以得到只针对目标应用的运行参数(即只对异常的分析起作用的数据)。[0074]以Android操作系统为例:[0075]Android的Dalvik虚拟机是Android移动设备平台的核心组成部分之一,它可以支持已转换为.dex(即DalvikExecutable)格式的Java应用程序的运行。在Android的Dalvik虚拟机中,所有的Java函数的信息都是保存在一个叫Method的结构体中。在Method结构体中有一个成员变量nativeFunc保存了该Java函数的本地入口函数指针,另一个成员变量insns保存了Java函数的bytecode函数指针(bytecode是Java等语言编译后的指令,用于给虚拟机执行,通常是一个字节一个指令)。[0076]基于上述原理,假定跟踪函数methodTrace,则动态跟踪目标应用运行的过程为:[0077]1.在原函数运行前,通过云端控制,修改成员变量nativeFunc的函数指针,触发跟踪函数methodTrace被Dalvik虚拟机调用;[0078]i1.跟踪函数methodTrace执行自己的某些自己的逻辑(如保存/记录当前环境参数);[0079]ii1.跟踪函数methodTrace还原成员变量insns/nativeFunc的函数指针,并使用Dalvik虚拟机调用原函数;[0080]iv.在原函数运行结束后,跟踪函数methodTrace重新修改成员变量nativeFunc的函数指针,使之指回跟踪函数methodTrace自己;[0081]V.methodTrace执行自己的某些自己的逻辑(如保存/记录当前环境参数);[0082]上述跟踪过程可以准确地获取原函数运行过程中的环境参数,但是仅适用于单线程的跟踪,并没有考虑到要跟踪调用两个原函数的线程时重入的情况:当线程A调用原函数在步骤iii还没有返回时,另一个线程B同时要调用跟踪函数methodTrace,由于成员变量insns/nativeFunc的函数指针被临时还原到原函数,导致线程B并没有触发调用跟踪函数methodTrace,于是线程B的整个跟踪过程不会被调用,步骤ii和V的逻辑没有被执行。这样的重入情况可能会造成调用出现冲突,导致失效或程序崩溃,如果是在系统进程,会导致注入失效或更手机重启等问题。[0083]为此,本发明实施例还提出一种动态跟踪过程,请参见图4,其包括以下步骤:[0084]S2211,预先将原函数保存在指令成员变量中。[0085]S2212,在原函数开始运行前,通过所述控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。[0086]S2213,执行跟踪函数的逻辑。[0087]S2214,通过跟踪函数调用指令成员变量中的原函数。[0088]S2215,在原函数运行完成时,通过控制指令控制执行跟踪函数的逻辑,实现对原函数运行参数的记录。[0089]此跟踪过程将原函数保存在指令成员变量中,因而在调用原函数时不用还原入口函数指针,从而避免了重入冲突的发生。[0090]还是以Android操作系统为例:[0091]在Android的Dalvik虚拟机中,在通常情况下,一个Java函数要不就是Bytecode的(由Java语言编译出来),要不就是本地的(由C/C++语言编译出来)。即成员变量nativeFunc和成员变量insns必定是一个为空值(NULL),另一个不为空值,不为空值的就是其正式函数指针。[0092]而由于Dalvik虚拟机的特殊性,当发现成员变量nativeFunc不是空值时,不管成员变量insns是否为空值,都用成员变量nativeFunc中的函数来执行。现在把事先把原函数的整个信息保存在成员变量insns里面(因为成员nativeFunc的函数指针被修改后,成员变量insns不会被Dalvik虚拟机理会),即成员变量insns即为步骤S2211中所述的指令成员变量,在跟踪函数methodTrace里面直接调用之:[0093]1.在原函数运行前,通过云端控制,修改成员变量nativeFunc的函数指针,触发跟踪函数methodTrace被Dalvik虚拟机调用;[0094]i1.跟踪函数methodTrace执行自己的某些自己的逻辑(如保存/记录当前环境参数);[0095]ii1.跟踪函数methodTrace把成员变量insns的中保存的内容转换为Method结构体的内容,并使用Dalvik虚拟机调用原函数;[0096]iv.methodTrace执行自己的某些自己的逻辑(如保存/记录当前环境参数);[0097]第二种跟踪过程不仅具备了第一种跟踪过程的准确地获取原函数运行过程中的环境参数的优点,而且也适用双线程甚至多线程跟踪。[0098]请参见图5,其为本发明实施例的第二种跟踪和调试的方法的流程图,其包括以下步骤:[0099]S51,通过云端向调试监控服务器发送用于验证身份的标识码。[0100]所述标识码可以唯一标识用户,其可以是国际移动设备身份码、验证过的即时通信帐号(Internat1nalMobileEquipmentIdentity,IMEI)、验证过的手机号码、临时生成的易输入号码中的一种或多种。由于云端可能会同时控制多个用户移动终端的跟踪和调试,因而利用标识码可以更方便的对号入座,更准确地传输数据。[0101]S52,身份验证通过后,接收云端发送来的控制指令。[0102]S53,检测操作系统版本。[0103]S54,根据所述控制指令,调用函数符号与操作系统版本相应的跟踪函数,动态跟踪目标应用的运行,并获取运行参数。[0104]具体来说,先比较各版本的Method等关键结构体,提取公共部分,然后根据操作系统版本号来加载相应的符号就可以获取相应的跟踪函数,因而对各种操作系统版本具有兼容性,且只需要一个动态库即可。[0105]S55,将跟踪获得的运行参数通过云端输出给调试监控服务器。[0106]S56,接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令。[0107]S57,运行所述调试命令,对待应用进行调试。[0108]S58,将调试数据通过云端发送给调试监控服务器。[0109]使用本发明实施例的方法,整个跟踪和调试过程不用修改移动终端操作系统的系统服务,不需要root权限,且通过云端可以远程控制一个或同时控制多个移动终端的目标程序的运行参数输出,无需对移动终端进行现场调试,跟踪和调试过程方便快捷,节约了时间成本,也节省了因邀请不到用户而购买移动终端所花费的经济成本,同时对各操作系统的版本具有兼容性。[0110]本发明还提出一种跟踪和调试的系统,请参见图6,其为本发明实施例的一种跟踪和调试的系统的结构图,其包括若干移动终端61、云端62以及一个调试监控服务器63,移动终端61和调试监控服务器63都与云端62相连。云端62用于定义一个或多个协议,并与调试监控服务器63及移动终端61之间交互数据,以达到动态跟踪和调试的目的。调试监控服务器63用于供开发人员准备调试命令以及接收跟踪和调试获取的数据。移动终端61用于通过云端的控制跟踪目标应用程序的运行以重现问题,以及执行调试指令以对目标应用程序进行调试。[0111]其中,移动终端61进一步包括跟踪和调试的装置610,请参见图7,其为本发明实施例的第一种跟踪和调试的装置的结构图。此跟踪和调试的装置610包括控制指令接收模块611、跟踪模块612、运行参数输出模块613、调试命令接收模块614、调试模块615以及调试数据发送模块616。跟踪模块612与控制指令接收模块611相连,运行参数输出模块613与跟踪模块612相连,调试模块615与调试命令接收模块614相连,调试数据发送模块616与调试模块615相连。[0112]控制指令接收模块611用于接收云端62发送来的控制指令。所述控制指令用来触发对目标应用程序的跟踪函数。[0113]跟踪模块612用于根据控制指令接收模块611接收到的控制指令动态跟踪目标应用的运行,并获取运行参数。所述跟踪的目的是通过重现问题来获得程序运行参数。跟踪是只监控程序运行流程中的函数被调用时的情况,包括函数名、调用参数、类名、类成员属性值、附近的一些变量值等。所述动态跟踪是指只要待调试的目标应用程序运行时,云端62会自动控制跟踪模块612进行跟踪并进行日志输出。[0114]运行参数输出模块613用于将跟踪模块612跟踪获得的运行参数通过云端62输出给调试监控服务器63。调试监控服务器63收到运行参数输出模块613输出的运行参数后,开发人员要根据该运行参数找出目标应用程序异常的问题所在,并准备好调试需要用到的调试命令。[0115]调试命令接收模块614用于接收调试监控服务器63通过云端62发送来的根据运算参数设定调试命令。[0116]调试模块615用于运行调试命令接收模块614接收到的调试命令,对目标应用进行调试。调试用是指边跟踪边控制流程,调试过程中会自动收集数据,一但进入程序并允许调试后,流程控制权归终端开发人员所有,无需用户多次干预。[0117]调试数据发送模块616用于将调试数据通过云端62发送给调试监控服务器63。调试监控服务器63收到调试数据后,开发人员会对调试数据进行研究,如果调试数据对解决异常问题已经足够,则调试结束,如果调试数据不足以解决异常问题,则需要调整调整命令重新再对目标应用进行调试。[0118]通过本发明实施例的跟踪和调试的系统及装置,使整个跟踪和调试过程不用修改移动终端操作系统的系统服务,不需要root权限,且通过云端可以远程控制目标程序的运行参数输出,无需对移动终端进行现场调试,跟踪和调试过程方便快捷,节约了时间成本,也节省了因邀请不到用户而购买移动终端所花费的经济成本。[0119]请参见图8,其为本发明实施例的第二种跟踪和调试的装置的结构图,与图7的实施例相比,本实施例的装置还包括标识码发送模块617。标识码发送模块617用于通过云端62向调试监控服务器63发送用于验证身份的标识码。所述标识码可以唯一标识用户,其可以是国际移动设备身份码、验证过的即时通信帐号(Internat1nalMobileEquipmentIdentity,IMEI)、验证过的手机号码、临时生成的易输入号码中的一种或多种。由于云端可能会同时控制多个用户移动终端的跟踪和调试,因而利用标识码可以更方便的对号入座,更准确地传输数据。[0120]请参见图9,其为本发明实施例的第一种跟踪模块612的结构图,此跟踪模块612包括检测单元6121、第一跟踪函数调用单元6122、第一执行单元6123、还原单元6124、第二跟踪函数调用单元6125及第二执行单元6126。检测单元6121分别与第一跟踪函数调用单元6122及第二跟踪函数调用单元6125相连,第一执行单元6123与第一跟踪函数调用单元6122相连,[0121]检测单元6121用于检测操作系统版本,以使第一跟踪函数调用单元6122和第二跟踪函数调用单元6125根据操作系统版本调用相应函数符号的跟踪函数。[0122]第一跟踪函数调用单元6122用于在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。所述的原函数是指目标应用运行时需要的函数程序,一般来说,原函数多为加法函数。所述入口函数是指程序运行时候最开始调用的函数。所述的入口函数指针是指指向入口函数的入口地址的一个指针变量,其决定了哪一个入口函数是下一时刻所要运行的函数。所述的跟踪函数用于收集目标应用的运行参数。[0123]第一执行单元6123用于在第一跟踪函数调用单元6122调用跟踪函数时,执行跟踪函数的逻辑。所述跟踪函数的逻辑是收集当前时刻的环境参数,例如保存/记录/打印当前时刻的系统日志。[0124]还原单元6124用于通过跟踪函数还原入口函数指针,并调用原函数。还原单元6124调用了原函数后,原函数开始执行。[0125]第二跟踪函数调用单元6125用于在原函数运行完成时,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。[0126]第二执行单元6126用于在第二跟踪函数调用单元6125调用跟踪函数时,执行跟踪函数的逻辑,实现对原函数运行参数的记录。[0127]本实施例的跟踪模块612,由于在原函数开始运行之前以及运行完成后,分别调用一次跟踪函数来记录原函数运行前后的环境参数,因而通过结合跟踪函数两次收集的数据,就可以得到只针对目标应用的运行参数(即只对异常的分析起作用的数据)。[0128]请参见图10,其为本发明实施例的第一种跟踪模块612的结构图,此跟踪模块612包括检测单元6121、第一跟踪函数调用单元6122、第一执行单元6123、原函数保存单元6127、原函数调用单元6128以及第三执行单元6129。检测单元6121与第一跟踪函数调用单元6122相连,[0129]检测单元6121用于检测操作系统版本,以使第一跟踪函数调用单元6122根据操作系统版本调用相应函数符号的跟踪函数。[0130]第一跟踪函数调用单元6122用于在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数。[0131]第一执行单元6123用于在第一跟踪函数调用单元6122调用跟踪函数时,执行跟踪函数的逻辑。所述跟踪函数的逻辑是收集当前时刻的环境参数,例如保存/记录/打印当前时刻的系统日志。[0132]原函数保存单元6127用于预先将原函数保存在指令成员变量中。[0133]原函数调用单元6128用于通过跟踪函数调用指令成员变量中的原函数。[0134]第三执行单元6129用于在原函数运行完成时,通过控制指令控制执行跟踪函数的逻辑,实现对原函数运行参数的记录。[0135]本实施例的跟踪模块612,将原函数保存在指令成员变量中,因而在调用原函数时不用还原入口函数指针,从而避免了重入冲突的发生。[0136]本发明实施例还提出一种跟踪和调试的装置,其结构与功能与图7?图10的跟踪和调试的装置610相同,在此不再赘述。[0137]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-R0M,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或网络设备等)执行本发明实施例各个实施场景所述的方法。[0138]以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本申请技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本申请技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。【权利要求】1.一种跟踪和调试的方法,其特征在于,包括:接收云端发送来的控制指令;根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;将跟踪获得的运行参数通过云端输出给调试监控服务器;接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;运行所述调试命令,对目标应用进行调试;将调试数据通过云端发送给调试监控服务器。2.如权利要求1所述的跟踪和调试的方法,其特征在于,所述根据所述控制指令动态跟踪目标应用的运行的步骤包括:在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;执行跟踪函数的逻辑;通过跟踪函数还原入口函数指针,并调用原函数;在原函数运行完成时,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;执行跟踪函数的逻辑,实现对原函数运行参数的记录。3.如权利要求1所述的跟踪和调试的方法,其特征在于,所述根据所述控制指令动态跟踪目标应用的运行的步骤包括:预先将原函数保存在指令成员变量中;在原函数开始运行前,通过所述控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;执行跟踪函数的逻辑;通过跟踪函数调用指令成员变量中的原函数;在原函数运行完成时,通过控制指令控制执行跟踪函数的逻辑,实现对原函数运行参数的记录。4.如权利要求2或3所述的跟踪和调试的方法,其特征在于,所述调用针对目标应用预先设置的跟踪函数的步骤包括:检测操作系统版本;根据操作系统版本调用相应函数符号的跟踪函数。5.如权利要求1所述的跟踪和调试的方法,其特征在于,所述接收云端发送来的控制指令的步骤之前还包括:通过云端向调试监控服务器发送用于验证身份的标识码。6.如权利要求5所述的跟踪和调试的方法,其特征在于,所述标识码可以是国际移动设备身份码、验证过的即时通信帐号、验证过的手机号码、临时生成的易输入号码中的一种或多种。7.一种跟踪和调试的装置,其特征在于,包括:控制指令接收模块,用于接收云端发送来的控制指令;跟踪模块,用于根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;运行参数输出模块,用于将跟踪获得的运行参数通过云端输出给调试监控服务器;调试命令接收模块,用于接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;调试模块,用于运行所述调试命令,对目标应用进行调试;调试数据发送模块,用于将调试数据通过云端发送给调试监控服务器。8.如权利要求7所述的跟踪和调试的装置,其特征在于,所述跟踪模块进一步包括:第一跟踪函数调用单元,用于在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第一执行单元,用于在第一跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑;还原单元,用于通过跟踪函数还原入口函数指针,并调用原函数;第二跟踪函数调用单元,用于在原函数运行完成时,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第二执行单元,用于在第二跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑,实现对原函数运行参数的记录。9.如权利要求7所述的跟踪和调试的装置,其特征在于,所述跟踪模块进一步包括:原函数保存单元,用于预先将原函数保存在指令成员变量中;第一跟踪函数调用单元,在原函数开始运行前,通过所述控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第一执行单元,用于在第一跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑;原函数调用单元,用于通过跟踪函数调用指令成员变量中的原函数;第三执行单元,用于在原函数运行完成时,通过控制指令控制执行跟踪函数的逻辑,实现对原函数运行参数的记录。10.如权利要求8或9所述的跟踪和调试的装置,其特征在于,所述跟踪模块还进一步包括:检测单元,用于检测操作系统版本,以根据操作系统版本调用相应函数符号的跟踪函数。11.如权利要求7所述的跟踪和调试的装置,其特征在于,所述跟踪和调试的装置还包括:标识码发送模块,用于通过云端向调试监控服务器发送用于验证身份的标识码。12.如权利要求11所述的跟踪和调试的装置,其特征在于,所述标识码可以是国际移动设备身份码、验证过的即时通信帐号、验证过的手机号码、临时生成的易输入号码中的一种或多种。13.—种跟踪和调试的系统,其特征在于,包括调试监控服务器、云端及至少一个移动终端,所述移动终端包括跟踪和调试的装置,其中所述跟踪和调试的装置进一步包括:控制指令接收模块,用于接收云端发送来的控制指令;跟踪模块,用于根据所述控制指令动态跟踪目标应用的运行,并获取运行参数;运行参数输出模块,用于将跟踪获得的运行参数通过云端输出给调试监控服务器;调试命令接收模块,用于接收调试监控服务器通过云端发送来的根据所述运算参数设定调试命令;调试模块,用于运行所述调试命令,对目标应用进行调试;调试数据发送模块,用于将调试数据通过云端发送给调试监控服务器。14.如权利要求13所述的跟踪和调试的系统,其特征在于,所述跟踪模块进一步包括:第一跟踪函数调用单元,用于在原函数开始运行前,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第一执行单元,用于在第一跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑;还原单元,用于通过跟踪函数还原入口函数指针,并调用原函数;第二跟踪函数调用单元,用于在原函数运行完成时,通过控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第二执行单元,用于在第二跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑,实现对原函数运行参数的记录。15.如权利要求13所述的跟踪和调试的系统,其特征在于,所述跟踪模块进一步包括:原函数保存单元,用于预先将原函数保存在指令成员变量中;第一跟踪函数调用单元,在原函数开始运行前,通过所述控制指令修改入口函数指针,并调用针对目标应用预先设置的跟踪函数;第一执行单元,用于在第一跟踪函数调用单元调用跟踪函数时,执行跟踪函数的逻辑;原函数调用单元,用于通过跟踪函数调用指令成员变量中的原函数;第三执行单元,用于在原函数运行完成时,通过控制指令控制执行跟踪函数的逻辑,实现对原函数运行参数的记录。16.如权利要求14或15所述的跟踪和调试的系统,其特征在于,所述跟踪模块还进一步包括:检测单元,用于检测操作系统版本,以根据操作系统版本调用相应函数符号的跟踪函数。17.如权利要求13所述的跟踪和调试的系统,其特征在于,所述跟踪和调试的装置还包括:标识码发送模块,用于通过云端向调试监控服务器发送用于验证身份的标识码。18.如权利要求17所述的跟踪和调试的系统,其特征在于,所述标识码可以是国际移动设备身份码、验证过的即时通信帐号、验证过的手机号码、临时生成的易输入号码中的一种或多种。【文档编号】G06F11/36GK104281520SQ201310288000【公开日】2015年1月14日申请日期:2013年7月10日优先权日:2013年7月10日【发明者】郭浩然,梁家辉申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1