修改应用数据的方法、应用测试方法和装置与流程

文档序号:15462318发布日期:2018-09-18 18:27阅读:479来源:国知局
本申请涉及计算机
技术领域
:,特别是涉及一种修改应用数据的方法、应用测试方法、装置、计算机可读存储介质和计算机设备。
背景技术
::随着计算机技术的发展,越来越多的脚本语言被开发使用,比如lua语言。lua是一种小巧的脚本语言,随着计算机技术的发展,lua语言由于其易于嵌入的特点,被越来越广泛的运用。lua虚拟机,即lua_state,指的是对lua字节码进行解释并执行的引擎。Hook是一种程序中断机制,在对特定的系统事件进行Hook后,一旦发生Hook事件,对该事件进行Hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。lua的控制层(C层)提供了各种操作虚拟机中数据的接口,比如有luasettable、luarawset等,在传统技术中,若要对使用lua结构的应用或者框架进行数据的修改调试,一般是通过hook(一种程序中断机制)获取到lua的数据后,主动调用lua的控制层提供的接口获取或修改需要的lua数据。但是这种通过lua接口获取应用的lua数据以及修改应用的lua数据的方式,由于在lua虚拟机内部,是将应用的lua数据拷贝到栈中,故会导致栈中数据均是临时的数据,若是直接对通过lua接口获取到的应用的lua数据进行修改或设置,则会导致修改的操作变得困难。技术实现要素:基于此,有必要针对修改应用lua数据困难的技术问题,提供一种更为简便的修改应用数据的方法、应用测试方法、装置、计算机可读存储介质和计算机设备。一种修改应用数据的方法,包括:运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;当监听到所述应用的进程创建的第一线程执行所述编译后的动态库中包含的逻辑函数时,则获取所述第一线程中的变量数据;将所述第一线程中的变量数据发送至第二线程;通过所述第二线程将所述第一线程中的变量数据发送至变量显示界面进行显示;通过所述第一线程获取对所述变量显示界面中显示的变量数据的修改指令,所述修改指令用于对所述第一线程中的变量数据进行修改。一种应用测试方法,所述方法包括:在被测试终端的应用运行过程中注入编译后的动态库;获取在变量显示界面上产生的数据获取指令,将所述数据获取指令发送至所述应用;在所述变量显示界面显示对应的变量数据及与所述变量对应的变量名,所述变量数据为所述应用的进程创建的第一线程通过执行所述编译后的动态库中包含的逻辑函数而获取到的所述第一线程中的变量数据;获取对所述变量显示界面中显示的变量数据的修改指令,将所述修改指令发送至所述应用,所述修改指令用于修改所述第一线程中的变量数据。一种修改应用数据装置,所述装置包括:运行模块,用于运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;变量数据获取模块,用于当监听到所述应用的进程创建的第一线程执行所述编译后的动态库中包含的逻辑函数时,则获取所述第一线程中的变量数据;变量数据发送模块,用于将所述第一线程中的变量数据发送至第二线程;通过所述第二线程将所述第一线程中的变量数据发送至变量显示界面进行显示;变量数据修改模块,用于通过所述第一线程获取对所述变量显示界面中显示的变量数据的修改指令,所述修改指令用于对所述第一线程中的变量数据进行修改。一种应用测试装置,所述装置包括:注入模块,用于在被测试终端的应用运行过程中注入编译后的动态库;数据显示模块,用于获取在变量显示界面上产生的数据获取指令,将所述数据获取指令发送至所述应用;在所述变量显示界面显示对应的变量数据及与所述变量对应的变量名,所述变量数据为所述应用的进程创建的第一线程通过执行所述编译后的动态库中包含的逻辑函数而获取到的所述第一线程中的变量数据;数据修改模块,用于获取对所述变量显示界面中显示的变量数据的修改指令,将所述修改指令发送至所述应用,所述修改指令用于修改所述第一线程中的变量数据。一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;当监听到所述应用的进程创建的第一线程执行所述编译后的动态库中包含的逻辑函数时,则获取所述第一线程中的变量数据;将所述第一线程中的变量数据发送至第二线程;通过所述第二线程将所述第一线程中的变量数据发送至变量显示界面进行显示;通过所述第一线程获取对所述变量显示界面中显示的变量数据的修改指令,根据所述修改指令用于对所述第一线程中的变量数据进行修改。一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;获取在变量显示界面上产生的数据获取指令,将所述数据获取指令发送至所述应用;在所述变量显示界面显示对应的变量数据及与所述变量对应的变量名,所述变量数据为所述应用的进程创建的第一线程通过执行所述编译后的动态库中包含的逻辑函数而获取到的所述第一线程中的变量数据;获取对所述变量显示界面中显示的变量数据的修改指令,将所述修改指令发送至所述应用,所述修改指令用于修改所述第一线程中的变量数据。一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;当监听到所述应用的进程创建的第一线程执行所述编译后的动态库中包含的逻辑函数时,则获取所述第一线程中的变量数据;将所述第一线程中的变量数据发送至第二线程;通过所述第二线程将所述第一线程中的变量数据发送至变量显示界面进行显示;通过所述第一线程获取对所述变量显示界面中显示的变量数据的修改指令,根据所述修改指令用于对所述第一线程中的变量数据进行修改。一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;获取在变量显示界面上产生的数据获取指令,将所述数据获取指令发送至所述应用;在所述变量显示界面显示对应的变量数据及与所述变量对应的变量名,所述变量数据为所述应用的进程创建的第一线程通过执行所述编译后的动态库中包含的逻辑函数而获取到的所述第一线程中的变量数据;获取对所述变量显示界面中显示的变量数据的修改指令,将所述修改指令发送至所述应用,所述修改指令用于修改所述第一线程中的变量数据。上述修改应用数据的方法、应用测试方法、装置、计算机可读存储介质和计算机设备,通过在应用运行时注入编译后的动态库,使应用执行注入的编译后的动态库,则可在监听到应用的进程创建的第一线程在执行编译后的动态库中包含的逻辑函数时,获取到第一线程中的变量数据。并通过根据编译后的动态库创建的第二线程将变量数据发送至变量显示界面进行显示,以此能够在变量显示界面上对变量数据进行修改。当通过变量显示界面对变量数据进行了修改后,则可根据触发的修改指令对第一线程中的变量数据进行修改。这种通过变量显示界面对应用的数据进行修改的方法,对应用数据进行修改更加方便快捷且易于操作。附图说明图1为一个实施例中修改应用数据的方法的应用环境图;图2为一个实施例中修改应用数据的方法的流程示意图;图3为一个实施例中编译后的动态库的生成步骤的流程示意图;图4为一个实施例中获取第一线程中的变量数据步骤的流程示意图;图5为一个实施例中将第一线程中的变量数据发送至第二线程步骤的流程示意图;图6为一个实施例中lua数据类型的示意图;图7为一个实施例中获取第一线程中的变量数据,将第一线程中的变量数据发送至第二线程步骤的流程示意图;图8为一个实施例中打包变量数据的流程示意图;图9为一个实施例中步骤210的流程示意图;图10为一个实施例中通过第一线程获取对变量显示界面中显示的变量数据的修改指令的步骤的流程示意图;图11为另一个实施例中修改应用数据的方法的流程示意图;图12为一个实施例中修改应用数据的方法的时序图;图13为一个实施例中修改应用数据的方法的流程图;图14为一个实施例中应用测试方法的流程示意图;图15为一个实施例中步骤1406的流程示意图;图16为一个实施例中变量显示界面的示意图;图17为一个实施例中修改应用数据装置的结构框图;图18为一个实施例中应用测试装置的结构框图;图19为一个实施例中计算机设备的结构框图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。图1为一个实施例中修改应用数据的方法的应用环境图。参照图1,该修改应用数据的方法应用于修改应用数据的系统。该修改应用数据的系统包括第一终端110和第一终端120。第一终端110和第一终端120通过网络连接。终端110和120具体都可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种,第一终端110用于运用应用,第二终端120用于显示变量显示界面,获取对变量显示界面中显示的变量数据的数据获取指令或修改指令等。如图2所示,在一个实施例中,提供了一种修改应用数据的方法。本实施例主要以该方法应用于上述图1中应用运行的第一终端110来举例说明。参照图2,该修改应用数据的方法具体包括如下步骤:步骤202,运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。在第一终端上启动并运行应用,将应用运行的过程中注入编译后的动态库,使得应用在运行的过程中执行注入的编译后的动态库,此过程也可称为注入so,so即为编译后的动态库。编译后的动态库是指技术人员加入了自定义逻辑代码的动态库,以使应用在执行该编译后的动态库时,可根据编译后的动态库中包含的自定义逻辑代码执行相关的逻辑。动态库(DynamicLinkLibrary,缩写为DLL),又称为动态链接库,DLL是一个可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,使用动态库链接有助于共享数据和资源。步骤204,当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。当第一终端上的应用启动运行后,即启动了一个对应的进程。在应用的进程中,可以存在有多个执行路径,则进程可创建多个线程。比如启动微信应用,则可认为启动了一个进程,在微信中,可以聊天,可以看公众号的文章,则可认为启动了聊天线程,公众号线程等。对第一终端上运行的应用的进程进行监听,当监听到应用的进程创建了第一线程,且第一线程执行注入的编译后的动态库中包含的逻辑函数时,则可以获取到第一线程中的变量数据。第一线程中的变量数据可以是第一线程在运行过程中产生的数据。比如微信应用运行聊天的线程时,产生的聊天内容以及聊天用户的用户标识等变量数据。步骤206,将第一线程中的变量数据发送至第二线程。步骤208,通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示。第二线程是通过注入第一终端上运行的应用进程中的编译后的动态库创建的,可用于与变量显示界面进行数据交互。当获取到第一线程中的变量数据后,可将第一线程中的变量数据发送至第二线程,由第二线程将变量数据发送至第二终端上的变量显示界面,则可以在第二终端上的变量显示界面中显示该变量数据。变量指的是动态库中能存储计算结果或能表示值抽象的概念,变量包括该变量的名称,即变量名,以及该变量的值,即变量数据。在第二终端上的变量显示界面显示变量数据时,可以将变量数据与对应的变量名共同显示。比如显示微信的聊天数据,则可以显示为聊天内容(content),你下班了吗?“你下班了吗”为变量数据,content即为对应的变量名。步骤210,通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改。在第二终端上的变量显示界面显示第一线程中的变量数据及对应的变量名后,可对变量显示界面上显示的变量数据进行修改。通过变量显示界面对显示的变量数据进行修改时,会产生对应的修改指令,可通过第一线程获取到该修改指令,修改指令用于对第一线程中的变量数据进行修改。即,第一线程在获取到该修改指令后,可通过执行该修改指令对第一线程中的变量数据进行修改。上述修改应用数据的方法,通过在应用运行时注入编译后的动态库,使应用执行注入的编译后的动态库,则可在监听到应用的进程创建的第一线程在执行编译后的动态库中包含的逻辑函数时,获取到第一线程中的变量数据。并通过根据编译后的动态库创建的第二线程将变量数据发送至变量显示界面进行显示,以此能够在变量显示界面上对变量数据进行修改。当通过变量显示界面对变量数据进行了修改后,则可根据触发的修改指令对第一线程中的变量数据进行修改。这种通过变量显示界面对应用的数据进行修改的方法,对应用数据进行修改更加方便快捷且易于操作。如图3所示,在一个实施例中,编译后的动态库的生成方式包括以下步骤:步骤302,获取应用的脚本语言源码。步骤304,对脚本语言源码进行编辑,加入预先编辑的逻辑代码。步骤306,对加入了预先编辑的逻辑代码的脚本语言源码进行编译,得到编译后的动态库。针对需要修改数据的应用,可先获取到该应用的脚本语言源码。应用在开发过程中,可以使用多种语言开发,比如可以使用Java(一门面向对象编程语言)语言、C++(C语言的继承,C语言是一门通用计算机编程语言)语言开发应用,针对不同的功能可使用不能的语言开发应用,使得应用更好的实现特定功能。应用的脚本语言源码可以是lua源码,lua源码是指该应用使用lua语言实现的逻辑功能部分的代码。以lua源码为例,当获取到lua源码后,可对lua源码进行编辑,加入自定义的逻辑代码,以此增加部分功能。应用在执行加入了逻辑代码的编译后的动态库时,可实现加入的逻辑代码中增加的功能。再对加入了预先编辑的逻辑代码的lua源码进行编译,即可得到编译后的动态库。通过在第一终端的应用运行过程中,将编译后的动态库注入,应用即可通过执行编译后的动态库,从而实现编译后的动态库中增加的功能。比如监听到应用的进程创建的第一线程在执行编译后的动态库中包含的逻辑函数时,可获取到第一线程中的变量数据,进而通过变量显示界面显示变量数据。在lua线程的变量数据中,即在lua数据中,每个数据都是通过一个TValue结构来表示,该结构指针可以看作是一个数据的唯一标识(id)。若是使用luaapi(lua接口)枚举lua数据时,lua栈中的TValue是原始TValue的拷贝,属于临时“变量”,则不能将lua栈中的TValue指针作为数据唯一的id,否则修改时使用id对数据进行修改时,则会导致无法真正修改原始数值。因此,为了得到真正的TValue指针,即变量数据唯一的id,可通过生成编译后的动态库,从而能够获取到真正的lua数据,以此能够实现对变量数据进行准确的修改。在一个实施例中,当监听到应用所在的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据,包括:对应用的进程进行监听,当监听到应用的进程创建了第一线程时,则获取到第一线程,第一线程为lua线程;对lua线程进行监听,当监听到lua线程执行编译后的动态库中包含的逻辑函数时,则获取lua线程中的变量数据。第一线程是由第一终端上的运行的应用所在的进程创建的,在应用运行对应的进程中,可以创建多个线程,因此可以对应用的进程进行监听,监听应用的进程创建了哪些线程。当监听到应用的进程创建了第一线程时,则获取到第一线程,获取到第一线程后即可对第一线程进行监听。第一线程为lua线程,也可称为虚拟机线程,lua线程为应用创建的线程中的一个,当应用进程运行至应用中使用lua语言实现的功能时,则会创建lua线程,即虚拟机线程。一个应用进程一般创建一个虚拟机线程,应用在执行到其他的lua语言实现的功能时,均可通过创建的这个虚拟机线程运行。当获取到lua线程后,可对lua线程进行监听,当监听到lua线程执行编译后的动态库中包含的逻辑函数时,则可以通过lua线程执行编译后的动态库中的函数获取到lua线程中的变量数据。lua线程中的变量数据是指在lua线程运行过程中产生的数据,这些数据可以储存在lua线程的全局表中,全局表中存储有lua线程中的各种数据,比如各种函数的参数以及运行过程中产生的数据等,可通过全局表获知这些数据的储存位置以及具体的数据内容。通过这种监听的方式,能够及时的获取到第一线程通过执行回调函数获取到的变量数据,也提高了数据获取的效率性。在一个实施例中,编译后的动态库中包含有回调函数。如图4所示,则获取第一线程中的变量数据的步骤包括:步骤402,通过第二线程获取在变量显示界面上产生的数据获取指令,将数据获取指令添加到指令队列中。步骤404,第一线程通过执行回调函数从指令队列中获取到数据获取指令并解析,根据解析后的数据获取指令获取到对应的第一线程中的变量数据。在编译后的动态库中,包含有回调函数,第一线程可通过执行编译后的动态库中的回调函数执行第二线程的指令队列中的指令。当在变量显示界面上触发对变量数据的获取指令时,则会产生对应的数据获取指令,当通过第二线程获取到在变量显示界面上产生的数据获取指令后,可将数据获取指令添加至指令队列中,即当在变量显示界面上产生了数据获取指令后,并不会立即执行该数据获取指令,而是会先将产生的指令添加到第二线程中的指令队列中。第一线程在执行编译后的动态库中包含的回调函数时,可从第二线程的指令队列中获取到指令队列中包含的各种指令,比如数据获取指令。第一线程即可通过执行回调函数对获取到的数据获取指令进行解析,并根据解析后的数据获取指令获取到对应的第一线程中的变量数据。由于变量显示界面所在的第二终端,产生的指令无法与第一终端运行的应用进程创建的第一线程进行直接的交互,即第二终端上的UI(界面)交互无法直接与第一终端上的lua线程进行交互,应该可通过编译后的动态库创建第二线程,用于与第二终端上的UI界面进行交互,以此能够在第二终端的界面上显示第一终端上运行的lua线程获取到的变量数据,同时能够使得在第二终端上的变量显示界面对变量数据进行修改,实现了更加方便快捷对变量数据进行修改的操作方式。在一个实施例中,编译后的动态库中包含有回调函数。如图5所示,将第一线程中的变量数据发送至第二线程的步骤,包括:步骤502,通过第一线程执行编译后的动态库中包含的回调函数枚举第一线程中的变量数据及对应的变量名。步骤504,检测第一线程中的变量数据的数据类型,根据数据类型将第一线程中的变量数据进行打包。步骤506,通过第一线程将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程。第一终端上运行的第一线程中的变量数据会通过第二线程发送至第二终端上的变量显示界面进行显示,进而可通过变量显示界面对显示的变量数据进行修改。为了修改时能够方便还原原始的变量数据,需要先将第一线程中的变量数据进行打包,打包操作可通过第一线程执行编译后的动态库中包含的回调函数实现,打包指的是将变量数据以一种格式进行保存。回调函数一个通过函数指针调用的函数,编译后的动态库中包含的回调函数是由技术人员根据预先定义的功能加入的函数,用于第一线程执行编译后的动态库时,可通过执行编译后的动态库中包含的回调函数对第一线程中的变量数据进行打包。当第一线程执行编译后的动态库中包含的回调函数获取到第一线程中的变量数据时,可通过执行回调函数枚举第一线程中的变量数据及对应的变量名,即将第一线程中的变量数据和与每个变量数据对应的变量名一一列举出来,并对每个变量数据的数据类型进行检测,根据数据类型将变量数据进行打包。第一线程中的变量数据为lua数据,如图6所示,lua数据中存在以下几种数据类型:nil、boolean、number、string、function、userdata、thread、table。在lua线程内部,数据类型均由TValue结构体表示。枚举出变量数据中的每条数据后,对每条数据的数据类型进行检测,比如检测是否有nil数据,有则打包nil数据,没有则检测是否有number数据等等,依次根据每个数据的数据类型将变量数据打包。将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程,第二线程可将数据再转发至第二终端上的变量显示界面进行显示。将变量数据打包后再发送至第二线程,使得变量数据的格式被统一规范,这样在需要将数据还原的时候,也能够方便还原原始数据。在一个实施例中,如图7所示,获取第一线程中的变量数据,将第一线程中的变量数据发送至第二线程的步骤,包括:步骤702,通过第二线程获取在变量显示界面上产生的数据获取指令,将数据获取指令添加到指令队列中。步骤704,第一线程通过执行回调函数从指令队列中获取到数据获取指令并解析,根据解析后的数据获取指令获取到对应的第一线程中的变量数据。当在第二终端的变量显示界面上触发对变量数据的数据获取指令后,可通过第一终端上运行的第二线程获取到该数据获取指令,并将数据获取指令添加到指令队列中。当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,第一线程可通过执行编译后的动态库中包含的回调函数从指令队列中获取到数据修改指令,并对数据修改指令进行解析,可通过解析后的数据修改指令获取到对应的第一线程中的变量数据。步骤706,通过第一线程执行编译后的动态库中包含的回调函数枚举第一线程中的变量数据及对应的变量名。步骤708,检测第一线程中的变量数据的数据类型,根据数据类型将第一线程中的变量数据进行打包。步骤710,通过第一线程将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程。当获取到第一线程中的变量数据后,可通过第一线程执行编译后的动态库中包含的回调函数枚举第一线程中的变量数据及对应的变量名。进一步地,第一线程可通过执行回调函数从第一线程对应的全局表中获取到对应的变量数据及对应的变量名,即枚举全局表中的数据。在全局表中存储有第一线程中的各种数据,比如各个函数的参数等,可通过全局表获取到每个数据的存储位置以及该数据的具体数据内容。枚举出变量数据后,可对变量数据的数据类型进行检测,并根据每个数据的数据类型进行打包。如图8所示的流程图,先枚举全局表中的数据,并打包每条数据。第一线程的全局表中存储的数据为lua数据,在lua数据中存在以下几种数据类型:nil、boolean、number、string、function、userdata、thread、table。在lua线程内部,数据类型均由TValue结构体表示。具体的打包操作过程为,检测变量数据中是否存在有nil数据,如果有,则打包nil数据;若是没有,则继续检测是否存在有number数据,如果有则打包number数据;若是没有。则继续检测。依次检测每种数据类型,若是检测到存在有该数据类型的数据,则打包该数据类型的数据;若是未检测到有该数据类型的数据,则检测下一种数据类型的数据是否存在,直到将全部数据类型都检测完毕。不同的是,当数据类型为table时,若是检测到存在有table类型的数据,则重新枚举变量数据。因为在lua中,table的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。因此若是没有检测到存在有table类型的数据,则打包其他的数据类型的数据即可。检测过程可以是串行的,检测数据类型的顺序也是可进行调整的,比如可将先检测nil的数据类型改成先检测number的数据类型,检测的逻辑代码可使用switch(一种条件语句)语句进行检测顺序的调整。当根据每条数据的数据类型对变量数据进行打包后,可通过第一线程将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程,第二线程则可将打包后的变量数据转发至变量显示界面进行显示。将数据进行打包后再发送至第二线程,第二线程再将打包后的数据发送至第二终端上的变量显示界面进行显示,实现了对变量数据的格式统一,也可以在编译后的动态库中定义一种数据类型,则可将变量数据中存在的多种数据类型均在进行打包后用一种规定的数据类型进行显示,便于对数据的管理,也使得对数据进行修改时更加方便简单。在一个实施例中,编译后的动态库中包含有回调函数。如图9所示,步骤210,包括:步骤902,通过第二线程获取对变量显示界面上显示的变量数据的修改指令,将修改指令添加到指令队列中。步骤904,第一线程通过执行回调函数从指令队列中获取到修改指令并解析,根据解析后的修改指令中携带的修改参数对第一线程中的变量数据进行修改。第二线程可获取到第二终端上的变量显示界面触发的指令,比如对变量显示界面上显示的变量数据的修改指令,第二线程获取到修改指令后,将修改指令添加到指令队列中,第一线程可通过第二线程的指令队列获取到待执行的指令。在编译后的动态库中,包含有回调函数,第一线程通过执行回调函数可获取到第二线程的指令队列中的指令,进而按照指令队列中的顺序依次执行各个指令。第一线程通过执行编译后的动态库中包含的回调函数获取到指令队列中的修改指令后,可对修改指令进行解析,并根据修改指令中携带的修改参数对第一线程中的变量数据进行相应的修改。通过第二线程获取到修改指令,并加入到指令队列中,避免了指令及时执行可能导致的数据错乱,且通过创建第二线程也能够实现与界面的交互,从而实现通过界面对变量数据的修改,使得修改变量数据变得更为简单方便。在一个实施例中,修改参数包括修改的变量内容、与修改的变量内容对应的变量名和变量标识。根据解析后的修改指令中携带的修改参数对第一线程中的变量数据进行修改,包括:从第一线程包含的变量数据中获取与变量标识对应的数据结构;将数据结构中与变量名对应的变量数据修改为变量内容。当第一终端运行的第一线程通过执行编译后的动态库中的函数,获取并执行第二线程的指令队列中的修改指令时,可根据修改指令中携带的修改参数对第一线程中的变量数据进行对应的修改。修改参数包括有修改的变量内容、与修改的变量内容对应的变量名和变量标识。当第一线程根据修改参数对变量数据进行修改时,可从第一线程中包含的变量数据中获取到与变量标识对应的数据结构,变量标识均有唯一对应的数据结构。变量数据为lua数据,在lua数据中,数据类型由TValue结构体表示,每个TValue结构体均有唯一的标识,即变量标识。获取到与变量标识对应的数据结构后,可将数据结构中与变量名对应的变量数据修改为变量内容,即完成对变量数据的修改。通过修改指令中携带的修改参数对变量数据进行对应的修改,确保了数据修改的准确性与高效性,使得修改变量数据的操作也更为简单方便。在一个实施例中,如图10所示,通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改的步骤,包括:步骤1002,通过第二线程获取对变量显示界面上显示的变量数据的修改指令,将修改指令添加到指令队列中。步骤1004,第一线程通过执行回调函数从指令队列中获取到修改指令并解析,修改指令中携带有修改参数,修改参数包括修改的变量内容、与修改的变量内容对应的变量名和变量标识。步骤1006,从第一线程包含的变量数据中获取与变量标识对应的数据结构。步骤1008,将数据结构中与变量名对应的变量数据修改为变量内容。当通过第二终端上的变量显示界面对显示的变量数据进行修改时,会产生对应的修改指令,当第一终端上运行的第二线程获取到第二终端上产生的修改指令后,则会将修改指令添加到指令队列中。第一线程可通过执行回调函数从指令队列中获取到该修改指令,并对修改指令进行解析,从而获取到修改指令中携带的修改参数,修改参数包括修改的变量内容、与修改的变量内容对应的变量名和变量标识。因此第一线程通过执行回调函数执行修改命令时,可从第一线程中包含的变量数据中获取到与变量标识对应的数据结构,变量标识均有唯一对应的数据结构。变量数据为lua数据,在lua数据中,数据类型由TValue结构体表示,每个TValue结构体均有唯一的标识,即变量标识。获取到与变量标识对应的数据结构后,可将数据结构中与变量名对应的变量数据修改为变量内容,即完成对变量数据的修改。比如,通过变量显示界面对变量名为Account的变量数据进行修改,此变量数据对应的变量标识为A13344。将原变量数据325485741修改为325485749,修改后则会产生对应的修改指令。在修改指令中,携带有对应的修改参数,包括有修改的变量内容325485749、与修改的变量内容对应的变量名Account和变量标识A13344。当第一线程根据获取到的修改指令对第一线程中的变量数据进行修改时,则可以从第一线程的变量数据中获取到与变量标识A13344对应的数据结构,再将此数据结构中变量名为Account的变量数据修改为变量内容325485749,即可完成对变量数据的修改。在本实施例中,通过执行回调函数对修改指令进行解析,并根据解析后得到的修改参数对变量数据进行对应的修改,确保了数据修改的准确性与高效性,使得修改变量数据的操作也更为简单方便。在一个实施例中,如图11所示,提供了一种修改应用数据的方法。本实施例主要以该方法应用于上述图1中应用运行的终端110来举例说明。参照图11,该修改应用数据的方法具体包括如下步骤:步骤1102,生成编译后的动态库。以应用的脚本语言源码为lua源码为例,当应用的脚本语言源码为lua源码时,lua源码运行时可创建lua线程,在lua线程的变量数据中,即在lua数据中,每个数据都是通过一个TValue结构来表示,该结构指针可以看作是一个数据的唯一标识(id)。若是使用luaapi(lua接口)枚举lua数据时,lua栈中的TValue是原始TValue的拷贝,属于临时“变量”,则不能将lua栈中的TValue指针作为数据唯一的id,否则修改时使用id对数据进行修改时,则会导致无法真正修改原始数值。因此,为了得到真正的TValue指针,即变量数据唯一的id,可通过生成编译后的动态库,从而能够获取到真正的lua数据,以此能够实现对变量数据进行准确的修改。获取到该应用的lua源码,lua源码是指该应用使用lua语言实现的逻辑功能部分的代码,可通过lua官方网站上获取。获取到lua源码后,可对lua源码进行编辑,加入自定义的逻辑代码后进行编译,即可得到编译后的动态库。对lua源码加入自定义的逻辑代码后可增加部分功能,应用在执行加入了逻辑代码的编译后的动态库时,可实现加入的逻辑代码中增加的功能。比如应用的进程创建的第一线程可执行数据获取指令,从而获取到第一线程中的lua数据,获取到的lua数据后即可获知每个数据对应的TValue指针的唯一id,因此能够实现对lua数据的准确修改。步骤1104,运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。在第一终端运行应用,在应用运行的过程中注入编译后的动态库,从而应用可执行编译后的动态库,从而可实现编译后的动态库中自定义的功能。即注入过程,注入指的是动态地向应用进程添加外部功能的实现方式。在本实施例中,外部功能已经包含在编译后的动态库中,将编译后的动态库注入到应用进程后,应用可通过执行编译后的动态库实现外部功能。步骤1106,对应用的进程进行监听,当监听到应用的进程创建了第一线程时,则获取到第一线程。在第一终端启动应用时,即启动了一个进程,在应用的进程运行过程中,可以创建多个线程。可以运用hook(一种中断机制),对应用的进程进行监听,当监听到应用的进程创建了第一线程时,则获取到第一线程。第一线程为lua线程,也可以称为虚拟机线程,即lua虚拟机。lua虚拟机(luastate),是一种对lua字节码进行解释并执行的引擎,字节码是一种包含执行程序,由一序列op(operationcode,操作码)代码/数据对组成的二进制文件,是一种中间码。hook是一种程序中断机制,在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。步骤1108,对第一线程进行监听,当监听到第一线程执行编译后的动态库中包含的逻辑函数时,则第一线程通过执行回调函数从第二线程的指令队列中获取到数据获取指令并解析。步骤1110,根据解析后的数据获取指令获取到对应的第一线程中的变量数据。当获取到第一线程后,即可对第一线程进行监听,监听第一线程的函数执行事件。当监听到第一线程执行编译后的动态库中包含的逻辑函数时,比如第一线程执行编译后的动态库中包含的回调函数时,则第一线程可通过执行回调函数从第二线程的指令队列中获取到数据获取指令并解析。第二线程是根据编译后的动态库中自定义的逻辑代码创建的,用于与变量显示界面进行交互,当在第二终端的变量显示界面上触发数据获取指令后,第二线程可获取到数据获取指令,并添加至指令队列中,第一线程执行编译后的动态库中包含的回调函数时,可从第二线程中的指令队列中获取到数据获取指令并解析,并根据解析后的数据获取指令获取到对应的第一线程中的变量数据。如图12所示的时序图,首先向应用进程中注入编译后的动态库,即注入so(动态库),当监听到应用进程创建了第一线程后,即可获取到第一线程,并监听第一线程。当监听到第一线程执行了编译后的动态库中的回调函数时,即可通过执行回调函数从第二线程的指令队列中获取数据获取指令,并对指令进行解析,根据解析后的数据获取指令获取到第一线程中的变量数据,即lua数据。并将获取到的lua数据解析后发送至第二线程,通过第二线程转发至变量显示界面进行显示。在第一线程执行回调函数从第二线程的指令队列中获取指令时,若是第二线程的指令队列中没有指令,则第一线程再次运行,当又一次执行到编译后的动态库中包含的回调函数时,则再从第二线程的指令队列中获取指令。因此,若是B步骤未执行,即第二线程未获取到数据获取指令,也未能将数据获取指令添加到指令队列中,那么第一线程则没有指令需要执行。如图13所示的流程图,在注入so后,存在第一线程和第二线程,第一线程为应用进程创建的lua线程,第二线程则为编译后的动态库中加入的逻辑代码创建的线程,用于和变量显示界面进行交互,即第二线程为和UI数据交互线程。第二线程在获取到变量显示界面的指令后,比如数据获取指令或修改指令,则会将获取到的指令添加到指令队列中。第一线程执行编译后的动态库中的回调函数时,则会从第二线程中的指令队列中获取指令,若是没有获取到,则继续执行第一线程;若是获取到指令,则根据获取的指令进行相应的处理。即获取到的是修改指令,则修改数据;获取到的是数据获取指令,则获取数据。步骤1112,通过第一线程执行编译后的动态库中包含的回调函数枚举第一线程中的变量数据及对应的变量名。步骤1114,检测第一线程中的变量数据的数据类型,根据数据类型将第一线程中的变量数据进行打包。步骤1116,通过第一线程将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程。步骤1118,通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示。当第一线程执行编译后的动态库中包含的回调函数获取到第一线程中的变量数据时,即lua数据,可通过执行回调函数枚举第一线程中的变量数据及对应的变量名,并对每个变量数据的数据类型进行检测,根据数据类型将变量数据进行打包。打包操作可通过第一线程执行编译后的动态库中包含的回调函数实现,打包指的是将变量数据以一种格式进行保存。将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程,第二线程可将数据再转发至第二终端的变量显示界面进行显示。步骤1120,通过第二线程获取对变量显示界面中显示的变量数据的修改指令,将修改指令添加到指令队列中。步骤1122,第一线程通过执行回调函数从指令队列中获取到修改指令并解析,修改指令中携带有修改参数,修改参数包括修改的变量内容、与修改的变量内容对应的变量名和变量标识。步骤1124,从第一线程包含的变量数据中获取与变量标识对应的数据结构。步骤1126,将数据结构中与变量名对应的变量数据修改为变量内容。当变量数据在第二终端的变量显示界面进行显示后,可对变量显示界面中显示的变量数据进行修改。将对变量数据进行修改时产生的修改指令发送至第一终端运行的第二线程,第二线程获取到修改指令后,则将修改指令添加到指令队列中。第一线程可通过执行回调函数从指令队列中获取到修改指令并解析,可根据解析后得到的修改参数对变量数据进行修改。修改参数包括修改的变量内容、与修改的变量内容对应的变量名和变量标识。第一线程根据修改参数对变量数据进行修改时先从第一线程包含的变量数据中获取到与变量标识对应的数据结构,数据结构与变量标识一一对应,因此可根据变量标识获取到对应的数据结构,并将数据结构中与变量名对应的变量数据修改为变量内容,则完成对第一线程中的变量数据的修改操作。本实施例中的修改应用数据的方法,通过在第一终端上的应用运行时注入编译后的动态库,使应用执行注入的编译后的动态库,则可在监听到应用的进程创建了第一线程后,则获取第一线程并对第一线程进行监听。当监听到第一线程在执行编译后的动态库中包含的回调函数时,则可通过第一线程执行回调函数获取到第一线程中的变量数据。第一线程通过执行回调函数对变量数据进行打包后,发送至第二线程,可通过根据编译后的动态库创建的第二线程将变量数据发送至第二终端的变量显示界面进行显示,以此能够在第二终端的变量显示界面上对变量数据进行修改。第二终端可以是测试终端,当通过第二终端的变量显示界面对变量数据进行了修改后,测试人员或者技术人员则可根据触发的修改指令对第一线程中的变量数据进行修改。这种通过变量显示界面对应用的数据进行修改的方法,对应用数据进行修改更加方便快捷且易于操作。在一个实施例中,如图14所示,提供了一种应用测试方法。本实施例主要以该方法应用于上述图1中的变量显示界面所在的终端120来举例说明。参照图14,该应用测试方法具体包括如下步骤:步骤1402,在被测试终端的应用运行过程中注入编译后的动态库。步骤1404,获取在变量显示界面上产生的数据获取指令,将数据获取指令发送至应用。在被测试终端上运行应用,在应用的运行过程中注入编译后的动态库,被测试终端可以是第一终端。编译后的动态库是指技术人员加入了自定义逻辑代码的动态库,以使应用在执行该编译后的动态库时,可根据编译后的动态库中包含的自定义逻辑代码执行相关的逻辑。在第二终端的变量显示界面上一开始并没有数据显示,即变量显示界面为空白,若是需要获取数据并显示,可通过变量显示界面触发数据获取指令。变量显示界面所在的终端,可获取到数据获取指令并发送应用。步骤1406,在变量显示界面显示对应的变量数据及与变量对应的变量名,变量数据为应用的进程创建的第一线程通过执行编译后的动态库中包含的逻辑函数而获取到的第一线程中的变量数据。步骤1408,获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至应用,修改指令用于修改第一线程中的变量数据。第一终端上运行的应用获取到数据获取指令后,可执行数据获取指令获取到应用中的lua数据,即变量数据。具体地,应用进程创建的第一线程通过执行编译后的动态库中的回调函数获取到数据获取指令后,并执行可得到第一线程中的变量数据,并通过编译后的动态库创建的第二线程将变量数据发送至第二终端的变量显示界面进行显示。变量数据均有对应的变量名,因此,可在变量显示界面显示对应的变量数据及与变量对应的变量名。当对某个变量名对应的变量数据进行修改时,则会产生对应的修改指令,将修改指令发送至应用后,应用可执行修改指令对变量数据进行修改。具体地,应用进程创建的第一线程通过执行编译后的动态库中的回调函数获取到修改指令后,执行修改指令对第一线程中的变量数据进行修改。通过注入编译后的动态库至处于运行状态的应用中,使得应用能够执行编译后的动态库,从而根据数据获取指令将对应的数据通过第二线程转发至第二终端的变量显示界面进行显示,测试人员即可通过第二终端的变量显示界面对变量数据进行修改,从而通过修改变量数据达到测试的目的,填补了代理或外部应用使用lua编译版本,无法对字节码进行反编译时无法测试的空白,能够通过变量显示界面对变量数据进行修改也使得对变量数据的修改更为简单方便。在一个实施例中,如图15所示,步骤1406,包括:步骤1406A,通过变量显示界面产生对应用的变量数据的数据获取指令。步骤1406B,将数据获取指令发送至应用。步骤1406C,接收应用的进程创建的第一线程根据数据获取指令获取到的对应的第一线程中的变量数据及对应的变量名,将变量数据及对应的变量名显示在变量显示界面。在需要将变量数据显示在变量显示界面时,可通过变量显示界面产生对应用的变量数据的数据获取指令,变量显示界面所在的终端获取到通过变量显示界面触发的数据获取指令后,可将数据获取指令发送至应用。应用的进程创建的第一线程则可通过执行数据获取指令获取到对应的第一线程中的变量数据和对应的变量名。如图16所示的变量显示界面的示意图,图中显示了结构名称为C550C1C0中包含的多个变量名及对应的变量数据,在图中的左侧显示的是变量名,比如_INNER、_LuaDelegate、_main_state、_G…等等。每个变量名都有对应的变量数据,在图中的右侧“值”那一栏,对应显示的则是每个变量名对应的变量数据。进一步地,可在图中显示出变量数据的类型,比如变量名为_INNER对应的变量数据为“3310408536”,数据类型为LUA_TTABLE,即table类型的数据。当在变量显示界面触发了数据获取指令后,即可将数据获取指令发送至应用,应用进程创建的第一线程即可执行数据获取指令获取到对应的变量数据,并由编译后的动态库中加入的逻辑代码创建的第二线程将变量数据转发至变量显示界面进行显示,使得能够在变量显示界面对变量数据进行修改,从而对应用数据进行修改更加方便快捷且易于操作。在一个实施例中,获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至应用,包括:获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至被测试终端运行的应用;修改指令中携带有修改参数,修改参数包括修改后的变量内容、与修改的变量内容对应的变量名和变量标识;修改指令用于应用的进程创建的第一线程获取到修改指令后,从第一线程的变量数据中获取与变量标识对应的数据结构,将数据结构中与变量名对应的变量数据修改为变量内容。对变量数据进行修改时,可通过变量显示界面对变量数据直接进行修改。修改后会产生对应的修改指令,变量显示界面所在的终端获取到修改指令后,可将修改指令发送至被测试终端上运行的应用,修改指令携带有修改参数,应用在获取到修改命令后,可根据修改参数对变量数据进行对应的修改。修改参数包括有修改后的变量内容、与修改的变量内容对应的变量名和变量标识。进一步地,应用在获取到修改命令后,应用的进程创建的第一线程可通过执行编译后的动态库中包含的回调函数获取到修改指令并解析,并从第一线程的变量数据中获取与变量标识对应的数据结构,将数据结构中与变量名对应的变量数据修改为变量内容,从而完成对变量数据的修改。根据修改指令中携带的修改参数对变量数据进行修改,使得修改操作更为准确。图2-图16包含有各个实施例中修改应用数据的方法或应用测试方法的流程示意图。应该理解的是,虽然各个图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各个图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。在一个实施例中,如图17所示,提供了一种修改应用数据装置,装置包括:运行模块1702,用于运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。变量数据获取模块1704,用于当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据。变量数据发送模块1706,用于将第一线程中的变量数据发送至第二线程;通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示。变量数据修改模块1708,用于通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改。在一个实施例中,上述装置还包括动态库生成模块(图中未示出),用于获取应用的lua源码;对lua源码进行编辑,加入预先编辑的逻辑代码;对加入了预先编辑的逻辑代码的lua源码进行编译,得到编译后的动态库。在一个实施例中,上述变量数据获取模块1704还用于对应用的进程进行监听,当监听到应用的进程创建了第一线程时,则获取到第一线程,第一线程为lua线程;对lua线程进行监听,当监听到lua线程执行编译后的动态库中包含的逻辑函数时,则获取lua线程中的变量数据。在一个实施例中,编译后的动态库中包含有回调函数。上述变量数据获取模块1704还用于通过第二线程获取在变量显示界面上产生的数据获取指令,将数据获取指令添加到指令队列中;第一线程通过执行回调函数从指令队列中获取到数据获取指令并解析,根据解析后的数据获取指令获取到对应的第一线程中的变量数据。在一个实施例中,变量数据发送模块1706还用于通过第一线程执行编译后的动态库中包含的回调函数枚举第一线程中的变量数据及对应的变量名;检测第一线程中的变量数据的数据类型,根据数据类型将第一线程中的变量数据进行打包;通过第一线程将打包后的各个数据类型对应的变量数据及对应的变量名发送至第二线程。在一个实施例中,编译后的动态库中包含有回调函数。上述变量数据修改模块1708还用于通过第二线程获取对变量显示界面上显示的变量数据的修改指令,将修改指令添加到指令队列中;第一线程通过执行回调函数从指令队列中获取到修改指令并解析,根据解析后的修改指令中携带的修改参数对第一线程中的变量数据进行修改。在一个实施例中,修改参数包括修改的变量内容、与所述修改的变量内容对应的变量名和变量标识。上述变量数据修改模块1708还用于从第一线程包含的变量数据中获取与变量标识对应的数据结构;将数据结构中与变量名对应的变量数据修改为变量内容。在一个实施例中,如图18所示,提供了一种应用测试装置,装置包括:注入模块1802,用于在被测试终端的应用运行过程中注入编译后的动态库。数据显示模块1804,用于获取在变量显示界面上产生的数据获取指令,将数据获取指令发送至应用;在变量显示界面显示对应的变量数据及与变量对应的变量名,变量数据为应用的进程创建的第一线程通过执行编译后的动态库中包含的逻辑函数而获取到的第一线程中的变量数据。数据修改模块1806,用于获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至应用,修改指令用于修改第一线程中的变量数据。在一个实施例中,上述数据显示模块1804还用于:通过变量显示界面产生对应用的变量数据的数据获取指令;将数据获取指令发送至应用;接收应用的进程创建的第一线程根据数据获取指令获取到的对应的第一线程中的变量数据及对应的变量名,将变量数据及对应的变量名显示在变量显示界面。在一个实施例中,上述数据修改模块1806还用于获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至被测试终端运行的应用;修改指令中携带有修改参数,修改参数包括修改后的变量内容、与修改的变量内容对应的变量名和变量标识;修改指令用于应用的进程创建的第一线程获取到修改指令后,从第一线程的变量数据中获取与变量标识对应的数据结构,将数据结构中与变量名对应的变量数据修改为变量内容。图19示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中应用运行的终端110,用于运行应用。如图10所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现修改应用数据的方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行修改应用数据的方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。本领域技术人员可以理解,图19中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。在一个实施例中,本申请提供的修改应用数据的装置可以实现为一种计算机程序的形式,计算机程序可在如图19所示的计算机设备上运行。计算机设备的存储器中可存储组成该修改应用数据装置的各个程序模块,比如,图17所示的运行模块、变量数据获取模块、变量数据发送模块和变量数据修改模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的修改应用数据的方法中的步骤。例如,图19所示的计算机设备可以通过如图17所示的修改应用数据装置中的运行模块执行运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。计算机设备可通过变量数据获取模块执行当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据。计算机设备可通过变量数据发送模块执行将第一线程中的变量数据发送至第二线程;通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示。计算机设备可通过变量数据修改模块执行通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改。在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的;当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据;将第一线程中的变量数据发送至第二线程;通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示;通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改。在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;获取在变量显示界面上产生的数据获取指令,将数据获取指令发送至应用;在变量显示界面显示对应的变量数据及与变量对应的变量名,变量数据为应用的进程创建的第一线程通过执行编译后的动态库中包含的逻辑函数而获取到的第一线程中的变量数据;获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至应用,修改指令用于修改第一线程中的变量数据。在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的;当监听到应用的进程创建的第一线程执行编译后的动态库中包含的逻辑函数时,则获取第一线程中的变量数据;将第一线程中的变量数据发送至第二线程;通过第二线程将第一线程中的变量数据发送至变量显示界面进行显示;通过第一线程获取对变量显示界面中显示的变量数据的修改指令,修改指令用于对第一线程中的变量数据进行修改。在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;获取在变量显示界面上产生的数据获取指令,将数据获取指令发送至应用;在变量显示界面显示对应的变量数据及与变量对应的变量名,变量数据为应用的进程创建的第一线程通过执行编译后的动态库中包含的逻辑函数而获取到的第一线程中的变量数据;获取对变量显示界面中显示的变量数据的修改指令,将修改指令发送至应用,修改指令用于修改第一线程中的变量数据。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1