本申请涉及计算机技术领域,尤其涉及一种应用程序调试方法、装置、终端及存储介质。
背景技术:
随着计算机技术的发展,各种应用程序层出不穷,小程序作为一种不需要下载安装即可使用的应用程序,其应用越来越广泛,小程序依赖于宿主应用程序运行,当运行的小程序出现问题时,通常通过调试来追踪和定位问题,但是,当运行错误的机器上没有调试工具,就需要进行远程调试。
相关技术通过小程序的官方开发工具来实现移动终端上的小程序的调试,小程序的开发者在pc(personalcomputer,个人电脑)上下载该工具,验证开发者身份后,打开小程序的源码,通过该工具的调试功能,来实现在pc上远程调试移动终端的小程序。
上述技术在调试小程序时需要小程序的源码,需要成为小程序的开发者才有权限进行调试,局限性大,导致适用性差。
技术实现要素:
本申请实施例提供了一种应用程序调试方法、装置、终端及存储介质,可以解决相关技术适用性差的问题。所述技术方案如下:
一方面,提供了一种应用程序调试方法,应用于第一终端,所述方法包括:
与第二终端上的应用程序建立通信连接,所述通信连接通过所述应用程序中注入的第一代码建立;
基于所述通信连接,获取所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同;
当接收到对所述第二代码的调试指令时,对所述第二代码进行调试。
在一种可能实现方式中,所述通过所述第一终端上的浏览器与所述应用程序对应的引擎建立通信连接,包括:通过所述浏览器基于所述第一代码提供的通信代理,与所述引擎建立通信连接,所述通信代理用于转发所述浏览器与所述引擎之间的交互数据。
在一种可能实现方式中,所述与第二终端上的应用程序建立通信连接之后,所述方法还包括:
基于所述通信连接,向所述应用程序中注入第三代码,所述第三代码用于拦截所述应用程序发送给业务服务器的网络请求数据;
当获取到被拦截的所述网络请求数据时,显示所述网络请求数据;
当接收到对所述网络请求数据的修改指令时,对所述网络请求数据进行修改;将修改后的网络请求数据发送给所述业务服务器。
一方面,提供了一种应用程序调试方法,应用于第二终端,所述方法包括:
向所述第二终端上的应用程序中注入第一代码,所述第一代码用于所述应用程序与所述第一终端建立通信连接;
运行所述第一代码,与所述第一终端建立通信连接;
基于所述通信连接,向所述第一终端提供所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同。
在一种可能实现方式中,通过所述应用程序对应的引擎与所述第一终端的浏览器建立通信连接,包括:通过所述引擎基于所述第一代码提供的通信代理,与所述浏览器建立通信连接,所述通信代理用于转发所述浏览器与所述引擎之间的交互数据。
一方面,提供了一种应用程序调试装置,所述装置包括:
建立模块,用于与第二终端上的应用程序建立通信连接,所述通信连接通过所述应用程序中注入的第一代码建立;
获取模块,用于基于所述通信连接,获取所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同;
调试模块,用于当接收到对所述第二代码的调试指令时,对所述第二代码进行调试。
在一种可能实现方式中,所述建立模块用于通过所述第一终端上的浏览器与所述应用程序对应的引擎建立通信连接,所述引擎用于执行所述应用程序的所述第二代码。
在一种可能实现方式中,所述调试模块用于当接收到对所述第二代码的调试指令时,将所述调试指令对应的调试数据发送给所述第二终端;当接收到所述第二终端返回的调试结果时,显示所述调试结果,所述调试结果由所述第二终端执行所述调试数据中的逻辑后得到。
在一种可能实现方式中,所述建立模块用于通过所述浏览器基于所述第一代码提供的通信代理,与所述引擎建立通信连接,所述通信代理用于转发所述浏览器与所述引擎之间的交互数据。
在一种可能实现方式中,所述装置还包括:
注入模块,用于基于所述通信连接,向所述应用程序中注入第三代码,所述第三代码用于拦截所述应用程序发送给业务服务器的网络请求数据;
所述显示模块还用于当获取到被拦截的所述网络请求数据时,显示所述网络请求数据;
修改模块,用于当接收到对所述网络请求数据的修改指令时,对所述网络请求数据进行修改;
发送模块,用于将修改后的网络请求数据发送给所述业务服务器。
一方面,提供了一种应用程序调试装置,所述装置包括:
注入模块,用于向所述第二终端上的应用程序中注入第一代码,所述第一代码用于所述应用程序与所述第一终端建立通信连接;
建立模块,用于运行所述第一代码,与所述第一终端建立通信连接;
提供模块,用于基于所述通信连接,向所述第一终端提供所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同。
在一种可能实现方式中,所述建立模块用于通过所述应用程序对应的引擎与所述第一终端的浏览器建立通信连接,所述引擎用于执行所述应用程序的所述第二代码。
在一种可能实现方式中,所述装置还包括:
调试模块,用于当接收到所述第二代码的调试数据时,执行所述调试数据中的逻辑,得到调试结果;
发送模块,用于将所述调试结果发送给所述第一终端。
在一种可能实现方式中,所述建立模块用于通过所述引擎基于所述第一代码提供的通信代理,与所述浏览器建立通信连接,所述通信代理用于转发所述浏览器与所述引擎之间的交互数据。
一方面,提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现上述应用程序调试方法。
一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现上述应用程序调试方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过向第二终端待调试的应用程序中注入外部代码,使得第一终端能够连接上该应用程序,从而在第一终端上对该应用程序进行远程调试。上述技术方案可以在没有应用程序的源码和开发者权限的情况下,实现第一终端对第二终端的应用程序的远程调试功能,提高了方法的适用性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种应用程序调试方法的实施环境示意图;
图2是本申请实施例提供的一种应用程序调试方法的流程图;
图3是本申请实施例提供的一种数据交互的原理图;
图4是本申请实施例提供的一种远程调试功能的实现原理示意图;
图5是本申请实施例提供的一种通信代理的实现原理示意图;
图6是本申请实施例提供的一种应用程序调试装置的结构示意图;
图7是本申请实施例提供的一种应用程序调试装置的结构示意图;
图8是本申请实施例提供的一种应用程序调试装置的结构示意图;
图9是本申请实施例提供的一种终端900的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了便于理解,下面对本申请实施例涉及到的一些名词进行解释:
微信小程序:基于微信实现的一种不需要下载安装即可使用的应用(简称为小程序)。
javascript:一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言(简称为js)。
v8:一个由google(谷歌)开发的开源javascript引擎,用于js的解释执行。
远程调试:当运行的程序出现问题时,通常通过调试来追踪和定位问题。但是,当运行错误的机器上没有调试工具,就需要实现远程调试。
代码注入:一种将外部代码写入其他进程中并执行的技术。
图1是本申请实施例提供的一种应用程序调试方法的实施环境示意图,参见图1,该实施环境中可以包括第一终端101和第二终端102。第一终端101包括但不限于pc,如台式电脑。第二终端102包括但不限于移动终端,如手机、平板电脑等。
其中,第一终端101用于对第二终端102上的应用程序进行调试,该应用程序可以是嵌入式程序,嵌入式程序是一种不需要下载安装即可使用的应用程序,该嵌入式程序需要依赖于宿主应用程序运行,相应地,第二终端102上安装有用于运行该嵌入式程序的宿主应用程序。例如,该宿主应用程序可以为微信,该嵌入式程序可以为小程序。
图2是本申请实施例提供的一种应用程序调试方法的流程图。以该方法由
第一终端和第二终端交互执行为例,参见图2,该方法可以包括:
201、第二终端向该第二终端上的应用程序中注入第一代码,该第一代码用于该应用程序与该第一终端建立通信连接。
其中,该应用程序为待调试的程序,如小程序,该第一代码为外部代码,该第一代码可以采用c++语言编写得到。
第二终端可以采用代码注入技术,将第一代码注入到应用程序中,具体地,将第一代码注入到应用程序的进程中。通过向待调试的应用程序中注入外部代码,为远程调试功能提供基础支持,使得第一终端可以与第二终端建立通信连接,进而实现第一终端对第二终端的应用程序的远程调试功能。
以该应用程序为小程序为例,小程序的运行环境分成渲染层和逻辑层,其中wxml(weixinmarkuplanguage,微信标签语言)模板和wxss((weixinstylesheets,微信样式语言)样式工作在渲染层,wxml模板用于构建小程序页面,wxss样式用于确定wxml的组件应该怎么显示。应用程序的js代码工作在逻辑层,逻辑层中的js代码具备发起网络请求、调用微信支付接口等能力,且该层只有一个线程,一个context(上下文环境),即所有代码都运行在一个环境中。
第一代码注入的进程可以是该应用程序的逻辑层运行的进程,通过将外部代码注入到小程序的逻辑层,使得该逻辑层有了调试功能,一旦打开该逻辑层的调试功能,即可具备和开发者同等的能力,可实现重写、调试小程序逻辑等功能,再通过扩展(patch)该逻辑层的执行环境或封装(wrap)本地接口,进而可突破小程序的限制并扩展小程序功能。例如,小程序原本不支持websocket连接第三方服务器,现在可以增加这样的功能。参见图3,提供了一种数据交互的原理图,如图3所示,小程序的渲染层和逻辑层可以通过本地接口,与第三方服务器建立websocket连接,websocket连接是基于websocket协议建立的连接,基于该websocket连接,小程序可以向第三方服务器发送https(hypertexttransferprotocolsecure,安全超文本传输协议)请求。
202、第二终端运行该第一代码,与该第一终端建立通信连接。
第二终端向该应用程序中注入第一代码后,可以运行该第一代码,实现该第一代码提供的功能,与第一终端建立通信连接。
在一种可能实现方式中,该与该第一终端建立通信连接,包括:通过该应用程序对应的引擎与该第一终端的浏览器建立通信连接,该引擎用于执行该应用程序的第二代码。具体地,该通过该应用程序对应的引擎与该第一终端的浏览器建立通信连接,包括:通过该引擎基于该第一代码提供的通信代理,与该浏览器建立通信连接,该通信代理用于转发该浏览器与该引擎之间的交互数据。
其中,该引擎为javascript引擎,如v8引擎。应用程序的第二代码为js代码,该第二代码是应用程序实际运行时加载并执行的代码,第二代码与该应用程序的源码(开发者版本的源码)不同,是通过对源码进行优化处理后得到的,该优化处理可以包括压缩、变量名字的去除等处理。通过将应用程序的源码进行优化处理得到第二代码,在终端上运行应用程序时,加载并执行该应用程序的第二代码,可以提高应用程序的运行效率,另外,通过与第一终端建立的通信连接,可以将该应用程序的第二代码提供给第一终端进行调试,这样可以在没有该应用程序的源码的情况下,实现该应用程序的调试。
以应用程序为小程序,应用程序对应的引擎为v8引擎为例,小程序的逻辑层在安卓系统下使用v8引擎实现,可以理解的是,第二终端安装微信后,在微信里打开该小程序,该小程序里有逻辑执行,该逻辑是js代码实现的,该js代码由v8引擎解释执行。v8引擎虽然包含了对浏览器调试协议的支持,但是无直接可用的接口打开远程调试功能,通过注入第一代码,可以打开远程调试功能。该第一代码的功能包括植入一个通信代理(agent),实现第一终端上的浏览器与第二终端上的应用程序对应的引擎之间的消息转发。
参见图4,提供了一种远程调试功能的实现原理示意图,如图4所示,v8引擎的原始功能模块包括检查器会话(v8inspectorsession)模块和检查器前端(inspectorfrontend)模块,浏览器的功能模块包括开发工具箱(devtools)模块,开发工具箱模块用于提供调试功能。注入第一代码后,扩展了v8引擎的原有功能,扩展的功能如图4中所示的检查器代理(inspectoragent)模块和通信协议,该通信协议可以是websocket,检查器代理模块用于在浏览器和v8引擎之间进行消息转发,如将开发工具箱模块的数据传入给检查器前端模块,检查器前端模块用于接收检查器代理模块传入的数据,并传入给检查器会话模块,检查器会话模块用于对数据进行处理,并输出处理后的数据,检查器代理将检查器会话模块的输出数据回传到开发工具箱模块。
参见图5,提供了一种通信代理的实现原理示意图,如图5所示,通信代理(agent)作为浏览器(具体可以是浏览器的devtools)与v8引擎通信的中间层,用于转发浏览器与v8引擎的消息。浏览器可以创建一个调试线程,v8引擎可以在小程序的进程中创建一个线程,通信代理可以在小程序的进程中创建一个线程,用于和浏览器进行通信,通信协议采用websocket实现,该线程的主要功能是将从浏览器接收到的数据传入到图4中的检查器前端模块,同时将检查器会话模块的输出数据回传到浏览器。
203、第一终端与第二终端上的应用程序建立通信连接后,基于该通信连接,向第二终端发送代码获取请求,该代码获取请求用于请求获取该第二终端的该应用程序的第二代码。
第二终端在运行第一代码时,第一终端可以利用该第一代码提供的功能,与第二终端的应用程序建立通信连接。
在一种可能实现方式中,第一终端与第二终端上的应用程序建立通信连接,包括:通过该第一终端上的浏览器与该应用程序对应的引擎建立通信连接,该引擎用于执行该应用程序的该第二代码。具体地,该通过该第一终端上的浏览器与该应用程序对应的引擎建立通信连接,包括:通过该浏览器基于该第一代码提供的通信代理,与该引擎建立通信连接,该通信代理用于转发该浏览器与该引擎之间的交互数据。具体过程与步骤202同理,不再赘述。
建立通信连接后,第一终端可以基于该通信连接,从第二终端请求该应用程序的第二代码,该第二代码的请求过程可以由用户的操作触发,例如,第一终端上可以显示调试界面,用户可以在该调试界面中进行操作,触发对第二代码的代码获取指令,第一终端在接收到该代码获取指令时,可以向第二终端发送对该第二代码的代码获取请求。
参见图6,提供了一种调试界面的示意图,如图6所示,该调试界面可以包括第一区域(左边区域)、第二区域(中间区域)和第三区域(右边区域),第一区域用于显示js代码列表,第二区域用于显示当前调试的代码,第三区域用于显示当前调试的代码的相关变量。该第一区域内可以提供一个代码获取入口,用户可以点击该入口,触发第一终端向第二终端请求该第二代码。
204、当接收到代码获取请求时,第二终端基于该通信连接,向该第一终端发送该第二终端的该应用程序的第二代码,该第二代码与该应用程序的源码不同。
第二终端可以在接收到第一终端对该第二代码的获取请求时,将该第二代码发送给第一终端。
由于该应用程序的第二代码由该应用程序对应的引擎执行,因此第二终端的该应用程序的第二代码,也即是,该应用程序对应的引擎已加载的第二代码。第二终端可以将当前已加载的第二代码提供给第一终端,例如,该引擎可以基于该通信连接,将已加载的该第二代码发送给第一终端的浏览器。
步骤204是第二终端基于该通信连接,向该第一终端提供该第二终端的该应用程序的第二代码的一种可能实现方式。通过在接收到第一终端的请求时,基于已建立的通信连接,为第一终端提供待调试的第二代码,进而可以实现第一终端对第二代码的远程调试功能。
205、第一终端基于该通信连接,接收该第二代码。
步骤203和步骤205是第一终端基于该通信连接,获取该第二终端的该应用程序的第二代码的一种可能实现方式。通过第一终端基于已建立的通信连接,采用发送请求的方式,从第二终端获取待调试的第二代码,进而可以实现第一终端对第二代码的远程调试功能。
206、第一终端显示该第二代码。
第一终端在获取到待调试的第二代码后,可以在当前界面上显示该第二代码。在一种可能实现方式中,第一终端可以在浏览器的调试界面中显示该第二代码。如图6所示,第一终端可以在第二区域显示当前调试的该第二代码。
207、当接收到对该第二代码的调试指令时,第一终端将该调试指令对应的调试数据发送给该第二终端。
第一终端在显示第二代码时,用户可以对该第二代码进行调试操作,触发该调试指令,第一终端可以将该调试指令对应的调试数据发送给第二终端。其中,该调试指令对应的调试数据为该第一终端根据用户的调试操作获得的操作数据。如图5所示,浏览器可以通过应用程序的通信代理将调试数据发送给应用程序对应的引擎(v8)。
在一种可能实现方式中,该调试指令由该第二代码的目标行被选中作为断点位置的调试操作触发,该当接收到对该第二代码的调试指令时,将该调试指令对应的调试数据发送给该第二终端,包括:当接收到该调试指令时,获取该目标行的行号;将该目标行的行号发送给该第二终端,由该第二终端在执行到该目标行时中断该第二代码的执行。
第一终端在显示当前待调试的第二代码时,用户可以选中该第二代码的目标行作为断点位置,触发该调试指令。如图6所示,用户可以对第二代码中的函数设置断点(函数断点),选中该函数的目标行作为断点位置。第一终端在接收到该调试指令时,可以获取该目标行的行号,将其作为断点行号发送给第二终端,第二终端在执行到该第二代码的该目标行时中断第二代码的执行。
针对调试指令由该第二代码的目标行被选中作为断点位置的调试操作触发的情况,在一种可能实现方式中,当接收到该调试指令时,第一终端显示该目标行对应的变量,该变量为该第二终端在执行到该目标行时访问的变量。
第二终端可以将执行到第二代码中的该目标行时可以访问的变量发送给第一终端进行显示,如第一终端可以在图6中的第三区域显示该变量。以上述函数断点举例,该变量可以是局部变量,局部变量指在程序中只在特定过程或函数中可以访问的变量。
208、当接收到该第二代码的调试数据时,第二终端执行该调试数据中的逻辑,得到调试结果。
第二终端在接收到该应用程序的第二代码的调试数据时,可以将该调试数据作为输入,发送到该应用程序对应的引擎中,由该引擎来执行该调试数据中的逻辑,输出调试结果。如图5所示,通信代理可以将浏览器的调试数据作为输入发送到v8引擎中,由v8引擎执行该调试数据中的逻辑后,输出调试结果,通信代理再将来自v8引擎的输出数据回传到浏览器中进行界面显示。
如图5所示,由于v8引擎本身机制的限制,运行时不允许跨线程进行数据输入,因此可以采用中断轮询的方式,实现该第二代码的调试过程。在一种可能实现方式中,中断轮询的过程包括:当接收到该第二代码的调试数据时,中断该第二代码的执行;执行该调试数据中的逻辑,得到该调试结果;继续该第二代码的执行。
209、第二终端将该调试结果发送给该第一终端。
第二终端可以基于与第一终端建立的通信连接,将调试结果发送给第一终端,如图5所示,第二终端的应用程序的v8引擎可以通过通信代理,将调试结果发送给第一终端的浏览器。
210、当接收到该第二终端返回的调试结果时,第一终端显示该调试结果。
第一终端在接收到调试界面后,可以刷新调试界面,显示该调试结果。
步骤207至步骤210是第一终端当接收到对该第二代码的调试指令时,对该第二代码进行调试的过程。
上述步骤201至步骤209是在第一终端上调试第二终端的应用程序的过程。通过向应用程序中注入外部代码,使用并扩展该应用程序对应的引擎的原有功能,实现了对该应用程序的js代码的远程调试功能。
在一个可选实施例中,第一终端与第二终端上的应用程序建立通信连接之后,该方法还包括:第一终端基于该通信连接,向该应用程序中注入第三代码,该第三代码用于拦截该应用程序发送给业务服务器的网络请求数据;当获取到被拦截的该网络请求数据时,第一终端显示该网络请求数据;当接收到对该网络请求数据的修改指令时,第一终端对该网络请求数据进行修改,将修改后的网络请求数据发送给该业务服务器。
其中,该第三代码可以为外部js代码,该网络请求数据是指网络请求中携带的数据。第一终端可以基于与第二终端的应用程序建立的通信连接,向应用程序中远程注入第三代码,该第三代码可以监控应用程序与业务服务器的网络请求数据,当监控到应用程序发送给业务服务器的网络请求数据时,拦截该网络请求数据,第二终端可以将拦截到的该网络数据请求发送给第一终端进行显示,用户可以对第一终端显示的网络请求数据进行修改操作,第一终端可以根据该修改操作,对网络请求数据进行修改,将修改后的网络请求数据发送给业务服务器。通过将外部js代码注入到该应用程序中,进而可以通过该外部js代码提供的功能,实现对应用程序的协议数据的捕获、拦截、修改、重发等功能。
相关技术在进行远程调试时,需要将pc端和移动端都连接到调试服务器,由调试服务器进行数据转发,实现pc端和移动端通信,进而实现其远程调试功能,而本申请实施例通过向待调试的程序中注入外部代码,可以实现pc端和移动端的通信连接,进而实现其远程调试功能。
本申请实施例提供的上述技术方案可以应用到安全测试工具(securityradar,sr)中,第一终端的浏览器可以内嵌有该工具。通过将外部c++代码注入到应用程序中,使得浏览器可以连接上应用程序进行代码断点、变量查看等调试相关的功能。通过应用本申请的远程调试技术,将外部js代码注入到该应用程序中,进而可以实现对应用程序的协议数据的捕获、拦截、修改、重发等功能。上述技术方案可以实现该应用程序的安全测试服务,如通过该应用程序的调试过程,可以测试该应用程序是否存在安全问题;上述技术方案还可以实现该应用程序的自动化风险扫描服务,如获取到网络请求中的数据后,可以修改后进行自动化测试,判断该网络请求是否有问题;上述技术方案还可以实现该应用程序的内容安全扫描服务,如截获到网络请求后,可以获取到网络请求中的数据,对这些数据进行安全测试,判断是否有违法的内容。
本申请实施例提供的方法,通过向第二终端待调试的应用程序中注入外部代码,使得第一终端能够连接上该应用程序,从而在第一终端上对该应用程序进行调试,实现该应用程序的远程调试功能。上述技术方案可以在没有应用程序的源码和开发者权限的情况下,实现第一终端对第二终端的应用程序的远程调试功能,提高了方法的适用性。
图7是本申请实施例提供的一种应用程序调试装置的结构示意图。参照图7,该装置包括:
建立模块701,用于与第二终端上的应用程序建立通信连接,所述通信连接通过所述应用程序中注入的第一代码建立;
获取模块702,用于基于该通信连接,获取该第二终端的该应用程序的第二代码,该第二代码与该应用程序的源码不同;
调试模块704,用于当接收到对该第二代码的调试指令时,对该第二代码进行调试。
在一种可能实现方式中,该建立模块701用于通过该第一终端上的浏览器与该应用程序对应的引擎建立通信连接,该引擎用于执行该应用程序的该第二代码。
在一种可能实现方式中,该调试模块704用于当接收到对该第二代码的调试指令时,将该调试指令对应的调试数据发送给该第二终端;当接收到该第二终端返回的调试结果时,显示该调试结果,该调试结果由该第二终端执行该调试数据中的逻辑后得到。
在一种可能实现方式中,该建立模块701用于通过该浏览器基于该第一代码提供的通信代理,与该引擎建立通信连接,该通信代理用于转发该浏览器与该引擎之间的交互数据。
在一种可能实现方式中,该装置还包括:
注入模块,用于基于该通信连接,向该应用程序中注入第三代码,该第三代码用于拦截该应用程序发送给业务服务器的网络请求数据;
该显示模块还用于当获取到被拦截的该网络请求数据时,显示该网络请求数据;修改模块,用于当接收到对该网络请求数据的修改指令时,对该网络请求数据进行修改;
发送模块,用于将修改后的网络请求数据发送给该业务服务器。
本申请实施例中,通过向第二终端待调试的应用程序中注入外部代码,使得第一终端能够连接上该应用程序,从而在第一终端上对该应用程序进行调试,实现该应用程序的远程调试功能。上述技术方案可以在没有应用程序的源码和开发者权限的情况下,实现第一终端对第二终端的应用程序的远程调试功能,提高了方法的适用性。
图8是本申请实施例提供的一种应用程序调试装置的结构示意图。参照图8,该装置包括:
注入模块801,用于向该第二终端上的应用程序中注入第一代码,该第一代码用于该应用程序与该第一终端建立通信连接;
建立模块802,用于运行该第一代码,与该第一终端建立通信连接;
提供模块803,用于基于该通信连接,向该第一终端提供该第二终端的该应用程序的第二代码,该第二代码与该应用程序的源码不同。
在一种可能实现方式中,该建立模块802用于通过该应用程序对应的引擎与该第一终端的浏览器建立通信连接,该引擎用于执行该应用程序的该第二代码。
在一种可能实现方式中,该装置还包括:
调试模块,用于当接收到该第二代码的调试数据时,执行该调试数据中的逻辑,得到调试结果;
发送模块,用于将该调试结果发送给该第一终端。
在一种可能实现方式中,该建立模块用于通过该引擎基于该第一代码提供的通信代理,与该浏览器建立通信连接,该通信代理用于转发该浏览器与该引擎之间的交互数据。
本申请实施例中,通过向第二终端待调试的应用程序中注入外部代码,使得第一终端能够连接上该应用程序,从而在第一终端上对该应用程序进行调试,实现该应用程序的远程调试功能。上述技术方案可以在没有应用程序的源码和开发者权限的情况下,实现第一终端对第二终端的应用程序的远程调试功能,提高了方法的适用性。
需要说明的是:上述实施例提供的应用程序调试装置在应用程序调试时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的应用程序调试装置与应用程序调试方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本申请实施例提供的一种终端900的结构示意图。该终端900可以是:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端900包括有:处理器901和存储器902。
处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的应用程序调试方法。
在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、显示屏905、摄像头906、音频电路907、定位组件908和电源909中的至少一种。
外围设备接口903可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路904用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏905用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置终端900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在终端900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在终端900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。
摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。
定位组件908用于定位终端900的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件908可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源909用于为终端900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。
加速度传感器911可以检测以终端900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器912可以检测终端900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对终端900的3d动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器913可以设置在终端900的侧边框和/或显示屏905的下层。当压力传感器913设置在终端900的侧边框时,可以检测用户对终端900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在显示屏905的下层时,由处理器901根据用户对显示屏905的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置终端900的正面、背面或侧面。当终端900上设置有物理按键或厂商logo时,指纹传感器914可以与物理按键或厂商logo集成在一起。
光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制显示屏905的显示亮度。具体地,当环境光强度较高时,调高显示屏905的显示亮度;当环境光强度较低时,调低显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。
接近传感器916,也称距离传感器,通常设置在终端900的前面板。接近传感器916用于采集用户与终端900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与终端900的正面之间的距离逐渐变小时,由处理器901控制显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与终端900的正面之间的距离逐渐变大时,由处理器901控制显示屏905从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条指令、至少一段程序、代码集或指令集的存储器,上述至少一条指令、至少一段程序、代码集或指令集可由处理器加载并执行以完成上述实施例中的应用程序调试方法。例如,计算机可读存储介质可以是只读存储器(read-onlymemory,rom)、随机存取存储器(random-accessmemory,ram)、只读光盘(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
技术特征:
1.一种应用程序调试方法,其特征在于,应用于第一终端,所述方法包括:
与第二终端上的应用程序建立通信连接,所述通信连接通过所述应用程序中注入的第一代码建立;
基于所述通信连接,获取所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同;
当接收到对所述第二代码的调试指令时,对所述第二代码进行调试。
2.根据权利要求1所述的方法,其特征在于,所述与第二终端上的应用程序建立通信连接,包括:
通过所述第一终端上的浏览器与所述应用程序对应的引擎建立通信连接,所述引擎用于执行所述应用程序的所述第二代码。
3.根据权利要求1所述的方法,其特征在于,所述当接收到对所述第二代码的调试指令时,对所述第二代码进行调试,包括:
当接收到对所述第二代码的调试指令时,将所述调试指令对应的调试数据发送给所述第二终端;
当接收到所述第二终端返回的调试结果时,显示所述调试结果,所述调试结果由所述第二终端执行所述调试数据中的逻辑后得到。
4.一种应用程序调试方法,其特征在于,应用于第二终端,所述方法包括:
向所述第二终端上的应用程序中注入第一代码,所述第一代码用于所述应用程序与第一终端建立通信连接;
运行所述第一代码,与所述第一终端建立通信连接;
基于所述通信连接,向所述第一终端提供所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同。
5.根据权利要求4所述的方法,其特征在于,所述与所述第一终端建立通信连接,包括:
通过所述应用程序对应的引擎与所述第一终端的浏览器建立通信连接,所述引擎用于执行所述应用程序的所述第二代码。
6.根据权利要求4所述的方法,其特征在于,所述向所述第一终端提供所述第二终端的所述应用程序的第二代码之后,所述方法还包括:
当接收到所述第二代码的调试数据时,执行所述调试数据中的逻辑,得到调试结果;
将所述调试结果发送给所述第一终端。
7.一种应用程序调试装置,其特征在于,所述装置包括:
建立模块,用于与第二终端上的应用程序建立通信连接,所述通信连接通过所述应用程序中注入的第一代码建立;
获取模块,用于基于所述通信连接,获取所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同;
调试模块,用于当接收到对所述第二代码的调试指令时,对所述第二代码进行调试。
8.一种应用程序调试装置,其特征在于,所述装置包括:
注入模块,用于向第二终端上的应用程序中注入第一代码,所述第一代码用于所述应用程序与第一终端建立通信连接;
建立模块,用于运行所述第一代码,与所述第一终端建立通信连接;
提供模块,用于基于所述通信连接,向所述第一终端提供所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同。
9.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现如权利要求1至3任一项,或者权利要求4至6任一项所述的应用程序调试方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现如权利要求1至3任一项,或者权利要求4至6任一项所述的应用程序调试方法。
技术总结
本申请公开了一种应用程序调试方法、装置、终端及存储介质,属于计算机技术领域。所述方法包括:与第二终端上的应用程序建立通信连接;基于所述通信连接,获取所述第二终端的所述应用程序的第二代码,所述第二代码与所述应用程序的源码不同;当接收到对所述第二代码的调试指令时,对所述第二代码进行调试。本申请可以在没有应用程序的源码和开发者权限的情况下,实现第一终端对第二终端的应用程序的远程调试功能,提高了方法的适用性。
技术研发人员:周江;王枭;王建行;刘鹏;罗德志;杨伟;李建颖;邱学倩;严明;朱佳欣;刘瑜;张晓蕴
受保护的技术使用者:腾讯科技(深圳)有限公司
技术研发日:.11.07
技术公布日:.02.25