一种可在线实时调试的方法、系统及存储介质技术方案

技术编号:21658297 阅读:25 留言:0更新日期:2019-07-20 05:33
本发明专利技术一种可在线实时调试的方法、系统及存储介质。一种可在线实时调试的方法基于调试系统实现,所述调试系统使用B/S架构,该方法包括以下步骤:用户交互端与服务端建立通信连接;用户交互端获取调试者给出的包含需调试代码信息的调试指令,然后发送到服务端;服务端选定目标机器及需要调试的源码片段,与选定的目标机器的虚拟机建立连接;当目标虚拟机上需要调试的源码片段执行时,虚拟机会在运行经过指定调试事件时触发一个断点事件,并将事件推送到调试器;调试器根据调试者指令执行单步调试,直至满足预设的断开连接条件后,断开目标虚拟机的连接。本发明专利技术可以实现断点调试线上环境,实时查看线上线程的堆栈数据。

A Method, System and Storage Medium for On-line Real-time Debugging

【技术实现步骤摘要】
一种可在线实时调试的方法、系统及存储介质
本专利技术涉及软件调试领域,尤其涉及一种可在线实时调试的方法、系统及存储介质。
技术介绍
程序的每一步的执行均是可控的,可以通过单步执行,设置断点等,控制程序的运行节奏,并在每次暂停时,都可以查看当前有效变量的具体值,从而可以对程序进行故障排查。现有技术中提供调试工具对程序进行调试,调试工具一般在开发联调阶段使用,以便完成代码阶段发现不了的一些bug,但是目前开发工具中自带的调试工具,比如Eclipse、IDEA、Jbuilder等均为本地化调试工具,一般只能在开发环境进行调试。通过开发IDE工具大部分时候只能完成本地开发过程中的一些调试工作,以及部分在测试环境里面修复bug时候的一些内网环境调试,线上环境通过开发工具是没有办法直接Debug的。线上的实际运行场景远复杂与测试环境所能模拟的场景,当开发测试工作完成并系统上线后,就只能通过日志行为、数据库记录等来判断系统问题,定位系统问题的效率低。现有技术也提供了能对线上程序进行监控调试的工具-Btrace,其工作原理是通过instrument+asm来对正在运行的java程序中的class类进行动态增强,动态地向目标应用程序的字节码注入追踪代码。但是Btrace存在以下问题:1、退出后注入的字节码会一直保留,直到重启,不当地使用BTrace可能导致JVM崩溃;2、没有界面化,只能日志可以排查;3、无法针对具体特殊请求做注入,AOP切面是全局的。
技术实现思路
为了解决上述问题,本专利技术的目的在于提供一种可在线实时调试的方法,该方法可以使调试器能及时了解目标虚拟机的状态,从而能够实现断点调试线上环境,实时查看线上线程的堆栈数据,让调试者可以更快更明确的了解线上出问题的实际原因。为了实现上述的目的,本专利技术提供了一种可在线实时调试的方法,该方法基于调试系统实现,所述调试系统使用B/S架构,包括搭载有web浏览器的用户交互端、服务端和目标机器,目标机器的虚拟机在线运行目标程序;该方法包括以下步骤:用户交互端与服务端建立通信连接;用户交互端获取调试者给出的包含需调试代码信息的调试指令,然后发送到服务端;服务端根据用户交互端发送的调试指令选定目标机器及需要调试的源码片段,与选定的目标机器的虚拟机建立连接,取得该对虚拟机的控制;根据调试者给出的断点设置信息设置调试器,然后将想要接收的调试事件发送给目标机器的虚拟机,所述想要接收的调试事件根据所述断点设置信息确定;当目标虚拟机接收到外部请求触发需要调试的源码片段执行时,虚拟机会在运行经过指定调试事件时触发一个断点事件,并将事件推送到调试器;监听来自目标虚拟机的事件一旦监听到断点事件符合当前调试条件,挂起当前线程,调试器获得线程栈中的数据,并返回给用户交互端,用于渲染界面,以便调试者清楚的了解当前线程内的所有数据;调试器同时会新建一个单步调试监视器,用于监视调试者发出的单步调试事件;并清空原有断点事件监视器,放行目标虚拟机代码片段上的其他请求,防止线上业务被堵塞;调试器根据调试者指令执行单步调试,直至满足预设的断开连接条件后,断开目标虚拟机的连接;其中,调试器包括两个重要对象:断点事件访问监视器与虚拟机连接管理器,断点事件访问监视器监听来自虚拟机的断点事件;虚拟机连接管理器建立虚拟机连接并对连接进行管理。虚拟连接器对连接的管理主要包括:创建连接、跟进uid、sid取得连接、检查目标机的连接是否正在被其他调试者调试。其中,用户交互端提供用户交互界面,用于提供调试指令输入接口、断点事件设置信息操作区域、选定的源码片段以及调试结果显示区域等,其中各操作区域和显示区域可以存在共用,对于调试结果显示区域,可以通过切换实现在同一区域显示不同的信息。用户交互端与服务端通信,目标机器的虚拟机被设置为可调试状态,服务端与目标机器的虚拟机通信,用户交互端通过服务端中转直接连线上虚拟机,获取并控制某个区块代码的执行步骤与执行过程,快速排查定位线上问题;以浏览器作为调试者的操作界面,调试过程图形化,提升解决问题的效率。并且通过单步调试监视器和断点事件访问监视器配合实现在进入调试时放行其他线上请求,使线上其他请求能够被正常执行。作为优选方案,所述用户交互端与服务端建立通信连接,包括:基于token的身份验证方法对当前登入用户提出的连接请求进行认证,若认证失败,服务端主动短链当前用户交互端与服务端之间的通道。系统基于B/S架构实现,对调试者身份进行进一步认证能够确保系统的安全性。作为优选方案,用户交互端与服务端基于WebSocket协议进行通信,用户交互端与服务端建立通信连接的步骤包括:初始化通道,当用户交互端的浏览器发出连接请求后,通道链接成功;通道连接成功后进行握手认证操作,认证的凭据是当前登入用户在登录时签发的token,若认证失败,服务端主动短链当前通道;认证通过后,服务端等待接收用户交互端发出的指定类型的事件消息。WebSocket可以在一个独立的持久连接上提供全双工双向通信,Websocket只需要一次HTTP握手,握手成功后建立连接,使用WebSocket协议可以提高通信效率,并且能在握手阶段进行调试者身份认证。作为优选方案,服务端根据用户交互端发送的调试指令选定目标机器及需要调试的源码片段,所述调试指令包括需要调试的项目名和需要调试的代码文件名,包括:设置需要调试的项目,项目所在机器的IP以及调试端口;根据指定的项目确定项目所在机器的IP,选择对应需要调试的目标机器;根据代码文件名从目标机器的虚拟机调取线上对应的源码片段并返回给用户交互端。在进入调试之前设置需要调试的项目,包括设置项目所在机器的ip以及调试端口,该步骤可以通过加载配置文件实现,具体设置内容在配置文件中规定。按上述方法,调试者只需要在用户交互端输入需要调试的项目名即可定位项目所在的机器,根据调试者输入的代码名称可以返回对应的源码片段在用户交互端的相应界面显示,便于用户操作。作为优选方案,与选定的目标机器的虚拟机建立连接,取得该对虚拟机的控制权,包括:建立连接后取得虚拟机管理器;对虚拟机的连接结果建立管理以确保同一调试者同一时刻只能调用一个目标虚拟机,同一目标虚拟机同一时刻只能被一个调试者调试。其中,虚拟机管理器是系统安装的现有的虚拟机套件,一般可以采用VirtualMachineManager。作为优选方案,所述根据调试者给出的断点设置信息设置调试器,包括:服务端计算出当前选定的源码片段可调试的行号并返回给用户交互端,然后等待来自用户交互端的断点事件,断点事件包含断点设置信息;服务端接收到断点事件后,为当前调试者分配唯一的调试器;将断点设置信息包含的具体条件设置到断点事件访问监视器。作为优选方案,所述将想要接收的调试事件发送给目标机器的虚拟机,其具体实现包括:通过调试器提供的指定接口把断点设置信息中指定的需要调试的类文件名和具体断点行号通知目标虚拟机。作为优选方案,判断监听到断点事件是否符合过滤条件,包括:调试器获得来自虚拟机的断点事件后,根据断点设置信息中包含的过滤字段是否为空判断是否需要过滤刷选;若过滤字段为空,则直接挂起当前线程进入调试;若过滤字段不为空,则遍历所有线程栈上的变量,以断点设置信息中包含的过滤字段值和过本文档来自技高网...

【技术保护点】
1.一种可在线实时调试的方法,其特征在于,该方法基于调试系统实现,所述调试系统使用B/S架构,包括搭载有web浏览器的用户交互端、服务端和目标机器,目标机器的虚拟机在线运行目标程序;该方法包括以下步骤:用户交互端与服务端建立通信连接;用户交互端获取调试者给出的包含需调试代码信息的调试指令,然后发送到服务端;服务端根据用户交互端发送的调试指令选定目标机器及需要调试的源码片段,与选定的目标机器的虚拟机建立连接,取得该对虚拟机的控制权;根据调试者给出的断点设置信息设置调试器,然后将想要接收的调试事件发送给目标机器的虚拟机,所述想要接收的调试事件根据所述断点设置信息确定;当目标虚拟机上需要调试的源码片段被执行时,虚拟机会在运行经过指定调试事件时触发一个断点事件,并将事件推送到调试器;监听来自目标虚拟机的事件一旦监听到断点事件符合当前调试条件,挂起当前线程,调试器获得线程栈中的数据,并返回给用户交互端;调试器同时会新建一个单步调试监视器,用于监视调试者发出的单步调试事件;并清空原有断点事件监视器,放行目标虚拟机代码片段上的其他请求;调试器根据调试者指令执行单步调试,直至满足预设的断开连接条件后,断开目标虚拟机的连接;其中,调试器包括两个重要对象:断点事件访问监视器与虚拟机连接管理器,断点事件访问监视器监听来自虚拟机的断点事件;虚拟机连接管理器建立虚拟机连接并对连接进行管理。...

【技术特征摘要】
1.一种可在线实时调试的方法,其特征在于,该方法基于调试系统实现,所述调试系统使用B/S架构,包括搭载有web浏览器的用户交互端、服务端和目标机器,目标机器的虚拟机在线运行目标程序;该方法包括以下步骤:用户交互端与服务端建立通信连接;用户交互端获取调试者给出的包含需调试代码信息的调试指令,然后发送到服务端;服务端根据用户交互端发送的调试指令选定目标机器及需要调试的源码片段,与选定的目标机器的虚拟机建立连接,取得该对虚拟机的控制权;根据调试者给出的断点设置信息设置调试器,然后将想要接收的调试事件发送给目标机器的虚拟机,所述想要接收的调试事件根据所述断点设置信息确定;当目标虚拟机上需要调试的源码片段被执行时,虚拟机会在运行经过指定调试事件时触发一个断点事件,并将事件推送到调试器;监听来自目标虚拟机的事件一旦监听到断点事件符合当前调试条件,挂起当前线程,调试器获得线程栈中的数据,并返回给用户交互端;调试器同时会新建一个单步调试监视器,用于监视调试者发出的单步调试事件;并清空原有断点事件监视器,放行目标虚拟机代码片段上的其他请求;调试器根据调试者指令执行单步调试,直至满足预设的断开连接条件后,断开目标虚拟机的连接;其中,调试器包括两个重要对象:断点事件访问监视器与虚拟机连接管理器,断点事件访问监视器监听来自虚拟机的断点事件;虚拟机连接管理器建立虚拟机连接并对连接进行管理。2.根据权利要求1所述的一种可在线实时调试的方法,其特征在于,所述用户交互端与服务端建立通信连接,包括:基于token的身份验证方法对当前登入用户提出的连接请求进行认证,若认证失败,服务端主动短链当前用户交互端与服务端之间的通道。3.根据权利要求2所述的一种可在线实时调试的方法,其特征在于,用户交互端与服务端基于WebSocket协议进行通信,用户交互端与服务端建立通信连接的步骤包括:初始化通道,当用户交互端的浏览器发出连接请求后,通道链接成功;通道连接成功后进行握手认证操作,认证的凭据是当前登入用户在登录时签发的token,若认证失败,服务端主动短链当前通道;认证通过后,服务端等待接收用户交互端发出的指定类型的事件消息。4.根据权利要求1所述的一种可在线实时调试的方法,其特征在于,服务端根据用户交互端发送的调试指...

【专利技术属性】
技术研发人员:骆华君许迎晨
申请(专利权)人:浙江讯盟科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1