系统过程日志打印与远程多终端日志调试控制系统的制作方法

文档序号:14653595发布日期:2018-06-08 22:30阅读:141来源:国知局
系统过程日志打印与远程多终端日志调试控制系统的制作方法

本发明涉及日志可视化技术领域,尤其涉及一种系统过程日志打印与远程多终端日志调试控制系统。



背景技术:

日志打印是程序调试人员获取程序执行状态的必要手段。当前,随着越来越多样的电子终端步入人们的生活,由传统的桌面平台,到Web平台端,以及现阶段流行的移动手机终端。应用程序的开发也呈现出多终端化的趋势。

现有的程序调试日志打印方式都是通过程序调试人员在程序代码中嵌入打印语句在程序运行过程中直接打印到控制台中,有的日志框架会将日志以文件或者数据库的形式储存。

以Android手机端移动应用研发为例,调试Android手机端应用的方法一般是,通过USB串口数据线,将需要调试的移动手机设备与调试终端相连接。在调试终端,通过谷歌官方提供的ADB调试程序进行程序的调试。谷歌的工程师将Android手机端日志打印设计为可以打印6种不同色彩的日志等级的日志,并且还支持按照日志标签对日志进行过滤的功能。

在程序研发阶段测试手机与调试终端的条件和环境比较齐备这样的日志调试方式是可以满足程序调试的需求的。但是关于日志构造输出和日志调试方面尚没有一个系统完善的解决方案。随着终端用户对于应用需求的逐步提升,程序调试和日志查看的情况越发复杂,对于日志调试的需要和要求不断提升,随着项目研发过程的逐步完善,传统的日志查看与日志调试方式已经不能够满足要求。

比如,按照系统业务过程缓存和打印系统的整体过程日志:

传统的日志打模式是,在输出控制语句如System.out的控制下,即时在控制台打印输出。但是调试人员有时候会需要按照系统的某个功能过程统一打印输出。一个系统的功能过程可能经过很多模块,甚至有跨线程的协作。程序执行的过程中也会出现函数的调用,或者函数中再调用函数的嵌套调用过程。每一个模块或者其他线程中的模块与函数都有可能拥有自己的日志打印结果输出。研发团队在研发过程中需要各个功能模块或者跨线程处理的程序模块各自打印的日志能够缓存和汇总起来,在一个系统过程执行结束后统一打印输出,而不是在一个小过程结束后就立即输出。研发团队需要日志构造工具能够跨函数和跨线程缓存与打印日志。并且在缓存和构造日志的过程中,不需要传递任何调用参数到各个功能模块的函数或者其他线程,以破坏它们的完整性或者增强模块对系统过程的依赖性。通过简单的代码控制,调试人员可以自由掌控各个功能模块是分开各自打印日志,还是合并打印总体过程日志。

再如,将某些移动用户终端的日志输出到打印输出到远程调试终端或者直接输出到移动用户终端上:

已经安装在移动用户终端的应用程序如果出现问题,按照传统的方式,只能由调试人员带着调试终端到用户现场去,连接数据线进行维护和调试。这是十分不便的,有的时候,一些特殊的移动终端,比如部分Android电视大屏,从硬件上就是不带串口调试接口的。研发团队需要在移动终端的日志打印既可以通过网络直接输出到远程调试终端上,也能直接显示在移动用户终端设备本身的一些特殊界面中(当然这些界面需要调试人员或者高级用户通过特殊的操作并鉴权才能打开),显示的内容即包括日志数据,也包括调测程序的当前用户使用截图。

还有,远程调试移动用户终端上的程序,或者控制执行一些预设的指令:

研发团队需要能够在服务端远程对移动用户终端上的程序进行调试,包括单步执行和获取每步变量的状态,能够进行调试,与调试现场的保护与恢复。有时还希望能够远程就对指定的移动终端执行一些命令或者操作。比如:重新启动应用系统,更新系统及应用数据,打开程序的日志捕捉开关或者调试开关等。

综上所述,在日志的产生与构造,日志的多终端输出,远程控制与日志调试方面,目前仍然没有很好的解决方案。迫切需要一整套完整的日志构造输出和日志调试的解决方案以进一步提升研发和调试的效率。



技术实现要素:

本发明涉及一种系统过程日志打印与远程多终端日志调试控制系统,可以使得当程序运行过程中按照系统业务构造完整的业务过程日志时,在不传递参数的情况下跨函数并跨线程缓存和打印日志,同时,可以在程序的运行过程中再远程终端控制程序并对程序进行远程调试,在程序运行过程中产生的日志数据与截图数据可以传输到远程调试终端显示,或者是直接将日志数据输出到移动用户终端。

为了实现本发明的目的,系统过程日志打印与远程多终端日志调试控制系统,包括WEB端、消息推送与接收服务器和移动端,WEB端包括设备管理模块、指令构造模块、WEB端消息发送模块、WEB端消息接收模块和日志显示模块,移动端包括移动端消息接收模块、AOP代码与调试开关模块、AOP日志捕捉控制模块、移动端日志搜集模块和移动端消息发送模块,调试终端用户通过设备管理模块查看所有需要调试的移动端,调试终端用户通过设备管理模块选定一个需要调试的移动端,设备管理模块将调试终端用户指令发送给指令构造模块,指令构造模块生成对应的控制信号发送给WEB端消息发送模块,WEB端消息发送模块将控制信号转发给消息推送与接收服务器进行处理,消息推送与接收服务器将控制信号推送到移动端消息接收模块,移动端消息接收模块对接收到的控制信号进行解码,

当收到的控制信号为调试指令时,移动端消息接收模块触发AOP代码与调试开关模块启动对断点的监听与对程序的阻塞工作;

当收到的控制信号为日志打印指令时,移动端消息接收模块触发AOP日志捕捉控制模块,AOP日志捕捉控制模块将日志打印指令发送给移动端日志搜集模块,移动端日志搜集模块进行日志捕捉,并将捕捉的日志数据发送给移动端消息发送模块;

移动端消息发送模块通过消息推送与接收服务器将日志数据发送给WEB端消息接收模块,WEB端消息接收模块将日志数据发送给日志显示模块进行日志的显示。

作为本发明的优化方案,移动端还包括移动端日志构造模块,移动端日志构造模块通过日志构造器类缓存和打印日志,日志构造器类内置日志数据缓存的数据结构。

作为本发明的优化方案,系统过程日志打印与远程多终端日志调试控制系统还包括一张从线程号到对应线程日志构造器引用队列的映射表。

作为本发明的优化方案,WEB端还包括实时调试模块,实时调试模块接收WEB端消息发送模块传输的调试信息,实时调试模块将调试信息通过视图展示同时存储到数据库中。

作为本发明的优化方案,移动端还包括代码调试缓存模块,代码调试缓存模块用于暂存两个断点之间的调试信息,等到程序进入下次断点时一起发送给移动端消息发送模块。

作为本发明的优化方案,移动端还包括日志显示与控制模块,日志显示与控制模块负责将满足用户过滤要求的日志直接输出到移动端的用户调试界面的日志显示控件当中。

作为本发明的优化方案,调试终端用户指令包括开启和关闭日志输出、为日志输出设置过滤标签和设置日志过滤等级。

作为本发明的优化方案,消息推送与接收服务器包括消息推送服务器和消息上传服务器,消息推送服务器包括消息推送会话管理器、消息接收器和转发器,消息上传服务器包括消息上传会话管理器、消息转发器和接收器,消息接收器接收WEB端消息发送模块下发的推送目标,消息推送会话管理器查询数据库确认控制信号的转发路由,根据转发路由映射关系将控制信号通过转发器推送到移动端消息接收模块;接收器接收移动端消息发送模块传输的日志数据,消息上传会话管理器从数据库查询所有在线并请求此移动端日志信息的WEB端,消息转发器将日志信息发送给所有在线并请求此移动端日志信息的WEB端。

本发明具有积极的效果:1)本发明为程序研发人员提供了更为灵活的日志构造和打印方式,特别是在研发框架的编码中有广泛的应用前景。通过简单的代码控制,研发人员可以自由掌控各个功能模块是统一打印日志,还是合并打印总体过程日志。

2)本发明能够将移动终端产生的日志直接输出到移动终端的特殊界面中,这对现场调试的工作带来了极大的便利。调试人员甚至可以不专门携带调试终端,就可以通过移动终端的特殊界面对程序进行简单的调试,并明确的判断程序的运行状态。

3)本发明能够将移动终端产生的日志输出到远程终端,调试人员无需前往现场,在远程就可以明确的判断移动终端设备的运行状况。即使相隔很远,也可以对程序进行控制和调试。从而便利了调试人员的调试工作,提高了调试的效率。

4)本发明在编码实施上,对应用程序代码采取非侵入式的策略,研发人员仅需要引用相关的程序依赖包,并做简单的配置即可。

5)本发明采用消息服务器进行进行日志信息和断点信息的发送,降低了各模块之间的耦合性,提高了通信效率,以致提升了异常的处理和分析能力。

6)本发明利用切面编程技术和反射技术,通过运行时内存的监控,提升了断点信息的捕捉能力。

附图说明

下面结合附图和具体实施方式对本发明作进一步详细的说明。

图1为本发明的总体架构组成图;

图2为实施例1的静态缓存结构示意图;

图3为实施例1的日志构造器工作原理图;

图4为调试终端与移动端日志输出原理图;

图5为移动端实时控制与调试流程。

其中:1、WEB端,2、消息推送与接收服务器,3、移动端,11、设备管理模块,12、指令构造模块,13、WEB端消息发送模块,14、WEB端消息接收模块,15、日志显示模块,16、实时调试模块,31、移动端消息接收模块,32、AOP代码与调试开关模块,33、AOP日志捕捉控制模块,34、移动端日志搜集模块,35、移动端消息发送模块,36、移动端日志构造模块,37、代码调试缓存模块,38、日志显示与控制模块,21、消息推送服务器,22、消息上传服务器,211、消息推送会话管理器,212、消息接收器,213、转发器,22、消息上传服务器,221、消息上传会话管理器,222、消息转发器,223、接收器。

具体实施方式

如图1所示,本发明公开了一种系统过程日志打印与远程多终端日志调试控制系统,包括WEB端1、消息推送与接收服务器2和移动端3,WEB端1包括设备管理模块11、指令构造模块12、WEB端消息发送模块13、WEB端消息接收模块14和日志显示模块15,移动端3包括移动端消息接收模块31、AOP代码与调试开关模块32、AOP日志捕捉控制模块33、移动端日志搜集模块34和移动端消息发送模块35,调试终端用户通过设备管理模块11查看所有需要调试的移动端3,调试终端用户通过设备管理模块11选定一个需要调试的移动端3,设备管理模块11将调试终端用户指令发送给指令构造模块12,指令构造模块12生成对应的控制信号发送给WEB端消息发送模块13,WEB端消息发送模块13将控制信号转发给消息推送与接收服务器2进行处理,消息推送与接收服务器2将控制信号推送到移动端消息接收模块31,移动端消息接收模块31对接收到的控制信号进行解码,

当收到的控制信号为调试指令时,移动端消息接收模块31触发AOP代码与调试开关模块32启动对断点的监听与对程序的阻塞工作;

当收到的控制信号为日志打印指令时,移动端消息接收模块31触发AOP日志捕捉控制模块33,AOP日志捕捉控制模块33将日志打印指令发送给移动端日志搜集模块34,移动端日志搜集模块34进行日志捕捉,并将捕捉的日志数据发送给移动端消息发送模块35;

移动端消息发送模块35通过消息推送与接收服务器2将日志数据发送给WEB端消息接收模块14,WEB端消息接收模块14将日志数据发送给日志显示模块16进行日志的显示。

本发明能够将调试终端用户指令发送到移动端3执行,以指挥移动端3完成日志调试的开启与关闭过程,或者调用移动端3一些预先定义好的系统过程,比如系统数据更新或者应用程序重启等操作。实现原理是,调试终端用户首先访问WebService的设备管理模块11查看所有在线可以调试的移动端3。设备管理模块11会自动读取数据库,关联的显示所有可以调测的移动端3,并显示移动端3是否在线的状态。调试终端人员可以选择一个移动端3,确认开启此移动端3的远程调试功能,然后进入的此移动端3的远程调试界面。此界面中,调试终端用户可以查看到移动端3的日志打印,当前用户使用截图,能够对程序执行进行断点调试,并可以执行一些预先定义好的更新数据或重启等的系统过程。

在接收到调试终端用户指令后,设备管理模块11将调试终端用户指令发送给指令构造模块12。指令构造模块12,会将接收到的指令或者指令组合解析,并生成对应的控制信号发送给WEB端消息发送模块13。WEB端消息发送模块13会将控制信号转发给消息推送与接收服务器2进行后续的处理过程。

消息推送与接收服务器2管理了所有在线移动端3的连接池,通过WEB端消息发送模块13下发的推送目标,查询数据库,确认消息转发路由。然后根据转发路由映射关系将控制信号推送到移动端消息接收模块31。

移动端消息接收模块31对接收到的控制信号进行解码,并控制AOP代码与调试开关模块32和AOP日志捕捉控制模块33调度包含移动端日志搜集模块34在内的移动端3的相关模块处理调试终端用户指令。

移动端3还包括移动端日志构造模块36,移动端日志构造模块36通过日志构造器类缓存和打印日志,日志构造器类内置日志数据缓存的数据结构。

系统过程日志打印与远程多终端日志调试控制系统还包括一张从线程号到对应线程日志构造器引用队列的映射表。

本发明提供了一个日志构造器类用于缓存和打印日志,可以在一个简单的原子过程,比如一个函数中使用日志构造器缓存和构造日志,并批量进行日志打印输出。其实现原理比较简单,日志构造器类内置了一个日志数据缓存的数据结构,日志在批量打印前,统一缓存到这个数据结构中。当研发人员调用打印输出接口的时候,批量将缓存的日志打印输出到控制台中。

为了解决跨线程和跨函数缓存与构造日志的问题,本发明在程序的静态数据缓存中维护一张从线程号到对应线程日志构造器引用队列的映射表,此映射表是类似HashMap的结构。在程序执行的过程中可以通过调用接口轻松的获取当前代码执行的线程号,通过查询此数据结构获取对应线程的日志构造器队列。

在同一个线程中解决跨函数问题的原理是,参与完整系统过程日志打印的所有日志构造器在创建的时候,通过特殊的调用接口,顺序的添加到本线程的日志构造器队列中。当一个日志构造器调用了打印接口的时候,读取此队列的信息,如果在队列中它有前一日志构造器,此时不将此日志构造器缓存的日志信息直接打印输出,而是打印它缓存的日志到前一日志构造器的缓存中。

队列中的第一个日志构造器,是系统过程入口函数中的日志构造器,最终由它统一将本线程中所有日志构造器缓存的日志统一打印输出。

对于一个系统过程开辟了新的线程来完成一些业务操作的情况。当在创建新线程对应的日志构造器队列的时候,自动将当前线程的入口函数日志构造器添加到新线程日志构造器队列的队头,使它成为新线程的入口函数日志构造器。这样,按照跨函数打印日志的原理,新线程中所有日志构造器缓存和构造的日志最终都将输出到当前线程的入口函数日志构造器中,由其统一打印。当前入口函数日志构造器在打印的时候,首先要遍历静态缓存中线程号到日志构造器队列的映射表,如果发现它仍在其它线程中构造日志(其它线程入口函数日志构造器是它),则推迟一段时间再打印。

因为在日志构造器之间缓存构造日志和打印日志的过程中只需要读取静态缓存中的映射表数据结构就可以全部完成,在系统过程跨函数或者跨线程的业务操作中不需要传递任何额外的参数或者引用。所以本发明缓存构造和打印日志的方式不会破坏系统过程函数的完整性,也不会破坏原子过程函数接口的参数完整性。

WEB端1还包括实时调试模块16,实时调试模块16接收WEB端消息发送模块13传输的调试信息,实时调试模块16将调试信息通过视图展示同时存储到数据库中。

移动端3还包括代码调试缓存模块37,代码调试缓存模块37用于暂存两个断点之间的调试信息,等到程序进入下次断点时一起发送给移动端消息发送模块35。

移动端3还包括日志显示与控制模块38,日志显示与控制模块38负责将满足用户过滤要求的日志直接输出到移动端3的用户调试界面的日志显示控件当中。

调试终端用户指令包括开启和关闭日志输出、为日志输出设置过滤标签和设置日志过滤等级。

消息推送与接收服务器2包括消息推送服务器21和消息上传服务器22,消息推送服务器21包括消息推送会话管理器211、消息接收器212和转发器213,消息上传服务器22包括消息上传会话管理器221、消息转发器222和接收器223,消息接收器212接收WEB端消息发送模块13下发的推送目标,消息推送会话管理器211查询数据库确认控制信号的转发路由,根据转发路由映射关系将控制信号通过转发器213推送到移动端消息接收模块31;接收器223接收移动端消息发送模块35传输的日志数据,消息上传会话管理器221从数据库查询所有在线并请求此移动端3日志信息的WEB端1,消息转发器222将日志信息发送给所有在线并请求此移动端3日志信息的WEB端1。

本发明能够在调试终端控制移动端3程序的执行,并对移动端3的程序进行调试,包括按照程序断点进行调试,调试中断,调试现场的保护与恢复过程。支持在单步调试过程中查看变量和临时变量的值。通过伴随进程,实时监控程序运行中的内存,并且记录程序运行内存的变化。当程序内存变化时,伴随进程对内存中的栈和堆进行与缓存中的变量进行比较。并把发生变化的内存地址记录下来,通过逆向工程转换为程序员能够理解的程序语言变量值。如果没有变化则把变量存入缓存,以备下次对比。

当有多断点需要监控时,采用拓扑排序算法得出执行序列,并对序列进行优化。当接到调试指令后,伴随进程根据执行序列把第一个断点监控初始化到内存中,并记录断点所有的内存值。

随着程序的运行。当进入到下次断点时,将会阻塞程序执行。并且通过代码注入的方式,把此时断点的所有信息发送给远端服务器。同时会销毁对上一断点的监控内存,回收上一断点的本地变量在缓存中的值。同时初始化此断点监控到内存中,启动该监控程序进行监控。

对于程序的输出则采用切面编程的技术进行收集。通过对系统打印函数的切面编程注入,每当有需要打印的内容产生时,会首先执行注入的代码。在注入代码中会把这些输出内容进行记录和筛选,对于跟该断点有关的输出进行保存,无关的信息则丢弃。当进入下一断点时则把这些输出信息发送给远程服务端。

在WEB端1构造了一个程序运行时环境,用以模拟程序的运行。当收到移动端3发送的断点信息和输出信息时,则对断点信息进行分析,在模拟环境中找到该程序的断点,并且注入程序的各变量的值。当开发者执行调试命令时,则通过指令构造模块12根据断点信息而构造出的指令通过消息推送与接收服务器2转发给手机端。对于日志信息进行筛选和分类,并展示给调试人员查看。

本发明同时还支持远程开启或者关闭移动终端日志捕捉,支持远程设置日志捕捉标签进行日志过滤,支持设置日志输出级别进行日志过滤。

本发明能够将移动端3日志输出直接输出到移动端3的一些特殊用户界面中,其实现原理是通过在移动端3的程序中执行控制命令,截取移动端3操作系统的日志输出流,从输出流中获取日志,进行一些初步的加工和处理后传送到移动端日志显示与控制模块。

日志显示与控制模块是移动终端的一个后台服务,负责按照调试用户的需求进行日志过滤和日志数据打包,并提供获取日志数据的接口。

调试人员通过特殊的操作可以打开移动终端上的一个特殊的程序调试界面。在此界面中,可以根据需要在界面控件中打开或者关闭日志输出,为日志输出设置过滤标签或者设置日志过滤等级等,这些操控指令都会由用户界面控件直接发送给日志显示与控制模块38。

日志显示与控制模块38负责将满足用户过滤要求的日志直接输出到移动端3的用户调试界面的日志显示控件当中。

本发明能够将移动端3的日志打包并通过计算机互联网输出到调试终端。移动端日志搜集模块34在接收到调试终端开启日志捕捉的指令之后,开始进行日志捕捉,并发送日志数据给移动端消息发送模块35。

移动端消息发送模块35开始连接位于云端的消息上传服务器22,并建立与消息上传服务器22的Socket连接来传输日志数据。消息上传服务器22本身是一个类似于JMS的结构,可以自动从数据库中查询出所有在线且请求此移动端日志信息的W EB端1的服务。消息推送服务器21将接收到通过Socket连接接收到的日志数据发送给所有请求此移动端日志的WEB端消息接收模块14。

WEB端消息接收模块14经过一定的处理,将日志信息发送给日志显示模块15。日志显示模块15本质是一个WebService,因此任意具有浏览器的电脑终端都可以访问此WebService获取移动端3的日志数据。

实施例1

如图2,按系统过程日志打印使用到的静态缓存数据结构。

在系统静态缓存中按照线程号为所有线程映射一个日志构造器引用队列。因为只存储线程号和日志构造器引用,所以不会有过多的内存开销。

对应线程中参与完整系统过程日志构造的日志构造器在创建的时候,都通过调用接口添加到本线程的日志构造器队列中来。例如图2中的111号线程。

对于跨线程执行的系统过程,其入口函数日志构造器自动成为新线程的入口函数日志构造器。例如图2中的444号线程。

如图3为日志构造器的工作原理流程图,日志构造器在创建的时候,获取当前的程序执行线程号,查询当前线程的日志构造器队列。如果当前线程的日志构造器队列没有创建,则创建本线程的日志构造器引用队列。不论是否新建队列,都将当前日志构造器入队到队尾。

接下来此日志构造器将按照正常的系统业务过程调用日志打印接口开始构造和缓存日志。

当调用了跨线程构造日志的接口时,读取本线程日志构造器队列获得入口函数日志构造器引用。然后在映射缓存中创建新的日志构造器队列,并把当前线程的入口函数日志构造器添加到队首。

当调用了日志打印接口的时候,读取本线程日志构造器队列判断当前日志构造器是否为本线程入口函数日志构造器。

如果当前日志构造器不是入口函数日志构造器,则读取本线程日志构造器队列,获得此日志构造器的前一日志构造器,并将日志输出到前一日志构造器的缓存中。

如果当前日志构造器是本线程的入口函数日志构造器,则遍历映射缓存确认其他线程的入口函数日志构造器是否也是本日志构造器。

如果其他线程中包含此日志构造器,则说明此日志构造器仍在其它线程中构造日志,此时需要等待一段时间,再继续打印输出的过程。

如果其他线程中没有查找到本日志构造器,则可以开始打印。首先需要将缓存的日志按照其产生线程进行排序,最终将排序后的日志打印输出到控制台。

实施例2

如图4,调试终端与移动端日志输出模块和流程。

设备管理模块11,主要用于管理当前的移动端3的状态信息。当需要查找移动端3的状态时,会向数据库发送查询请求,并解析查询之后返回的结果。对所有启动的应用程序状态进行记录并把记录存储在数据库。通过心跳进行应用程序状态更新和维护,并把开发者选中的设备转化为程序可识别的编号。

指令构造模块12,主要用于把用户的操作转化为应用程序能够理解的指令或者指令集。对发过来的指令进行语法分析,通过剪枝算法进行优化,并把代码翻译成相应的指令。翻译的指令会进行压缩和加密,并发送给WEB端消息发送模块13。

日志显示模块15,接收来自WEB端消息接收模块14传过来的日志信息,筛选开发者关注的日志信息,存储到数据库,并通过图文展示给开发者。开发者看到相关信息后可以进一步的操作和处理。日志可以在本地显示和WEB端1进行显示。

消息推送会话管理器211主要用于保存和记录所有与消息推送服务器21联通的会话信息。对所有的通信连接进行记录和保存会话连接信息,通过心跳维持与各连接设备的会话。并在需要的时候进行管理。当有消息需要转发时,会从数据库中取出消息推送服务器21与这个消息的目的地的会话,并把这个会话交给转发器213。主要流程有:1.从消息中解析出消息的目的地址;2.针对目的地地址,在数据库中进行匹配和查找;3.取出相应的会话信息,并传递给转发器213。

消息推送服务器21,主要用来转发消息生产者发送来的消息。主要由消息队列,缓存和路由表等组成。消息推送服务器21的工作原理和流程,。流程描述如下:1.消息推送服务器21接收到消息后放到消息队列中;2.对消息队列中的消息头部进行mod 4运算,并取出此消息放到相应的处理队列缓存中;3.根据消息头部到路由表中查找此消息相对应的接收者;4.验证查找出来的路由是否有效;5.根据路由信息发送这条消息;6.存储这条消息的发送信息。

AOP日志捕捉控制模块33,通过对代码的监测,对比当前是否打开日志捕捉开关。如果没有打开,则通过代码注入的方式,初始化记录日志的参数,运行注入的日志记录启动代码。其主要流程有:1.对代码进行检查,找出所有可能产生日志的地方;2.使用反射技术监控能够产生日志的地方;3.把日志产生点发送给日志监控模块。

移动端消息接收模块31,当消息从消息推送服务器21发送到移动端3移动端消息接收模块31会验证消息是否合法,并对消息进行解密和解压。然后判断消息的类型,并调用相应消息类型的处理模块进行消息处理。

对于在WEB端1与移动端3的日志输出中使用到主要流程有:

1.移动端3日志信息输出到移动端3特殊页面中,手机端接收到日志打开指令后,对代码进行检查,找出所有可能产生日志的地方(兴趣点),把这些兴趣点交给日志监控模块。日志监控模块收到这些兴趣点后,采用反射技术,对兴趣点的日志进行捕捉和记录,并进行归类,存储到本地cache中,并触发日志展示模块,并把cache的地址传给日志展示模块。日志展示模块被触发后,即实时到cache中读取日志数据,经过简单的组织和筛选直接展示给开发者。

2.移动端3日志信息输出到调试终端,手机端接收到日志打开指令后,对代码进行检查,找出所有可能产生日志的地方(兴趣点),把这些兴趣点交给日志监控模块。日志监控模块收到这些兴趣点后,采用反射技术,对兴趣点的日志进行捕捉和记录,并进行归类,存储到本地cache中,并触发移动端消息发送模块35,并把cache的地址地址传给移动端消息发送模块35。移动端消息发送模块35被触发后,实时到cache中读取日志数据,经过简单的组织和筛选后通过与消息上传服务器22之间的socket连接直接把日志信息发送给消息上传服务器22。消息上传服务器22收到这条消息后,首先解析消息的消息类型,并从消息上传会话管理器221中筛选此类消息的接收者的会话信息。之后把这些信息传递给消息转发器222,消息转发器222会重新组织消息格式,并把消息转发给对应的消息接收者。此时WEB端消息接收模块14,会收到日志信息,进行消息格式验证和解析出有用的日志消息并把日志消息传递给日志展示模块。日志消息展示模块经过简单的组织和筛选直接展示给开发者。

3.在调试终端远程控制移动端3执行控制命令,开发人员首先访问设备管理模块11,获得所有设备的状态。开发人员选中需要调试的手机并通过设备管理模块11传递给指令构造模块12。指令构造模块12对发过来的指令进行语法分析,通过剪枝算法进行优化,并把代码翻译成相应的指令。翻译的指令会进行压缩和加密,并发送给WEB端消息发送模块13。WEB端消息发送模块13对该指令进行校验和打包。并通过socket连接把信息发送给消息推送服务器21。消息接收器212对这个打包过的信息进行解包和校验。消息上传会话管理器221收到信息后,会从消息中解析出消息的目的地址,针对目的地地址,在数据库中进行匹配和查找,取出相应的会话信息,并传递给转发器213。转发器213会根据获得的会话信息把对应信息进行打包并发送给移动端消息接收模块31。

实施例3

如图5为移动端实时控制与调试流程。

AOP代码与调试开关模块32,在调试程序时,需要引入相关的代码依赖,需要在指定地方添加代码依赖。当收到WEB端1下发的调试指令后,AOP代码与调试开关模块32即刻启动对断点的监听与对程序的阻塞工作,同时对需要调试的代码进行变量跟踪,输出捕获,流程监控。把这个信息经过简单的筛选和组装发送给移动端消息发送模块35。另外对于处在两个断点之间的调试信息,则放入代码调试缓存中进行暂存,等到进入下次断点时一起发送给移动端消息发送模块35。

实时调试模块16,接收来自WEB端消息接收模块14传过来的调式信息(包含断点信息,变量值,打印输出),存储到数据库,筛选开发者关注的调式信息,并通过视图展示给开发者查看。开发者看到相关信息后可以选择继续调试还是中断,开发者的操作会通过实时调试模块传递给指令构造器。

对于在移动终端实时控制与调试中使用到主要流程有:

1.移动端断点与变量状态信息输出到调试终端,手机端接收到开始调试指令后,对代码进行检查,找出所有的断点,对这些断点进行拓扑排序;按照顺序依次启动对这些代码的断点的class文件进行监控,当该段代码的class文件被加载在内存时,则启动对这段代码的监控。当这段代码对应的内存发生变化时,则遍历这块内存,找到这块内存发生变化的地方,如果发生变化的位置不是在断点所在的位置,则把这些变化的位置逆解析为实际代码的量值存储在缓存中。如果变化发生在打断点的地方,则阻塞程序的运行,并将修改后的断点的变量值,打印信息,以及缓存中的变量信息一并进行压缩和打包,发送给移动端消息发送模块35。

手机端收到继续调试指令后,首先清空代码缓存模块中的内容,清除对上一断点的监控,即把内存监控的地址修改为下一断点所在的内存位置,并且修改原先的拓扑结构,把已经调试过的断点节点清除掉,并且按照指令再次进行拓扑排序,并按照上面的流程进行继续监控。

2.实时控制指令下发,与实施例2中的实时日志指令下发流程完全一致,这里不再重复说明。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1