System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,特别指一种代码在线调试方法。
技术介绍
1、目前,java web服务多以tomcat作为容器启动,由于缺乏实际业务数据的验证,很多功能在测试环境上没有办法及时发现,从而导致问题流露到生产环境,因此需要对相关问题进行定位排查,但传统方法存在如下缺点:
2、1、当问题频繁出现时,而测试环境又无法模拟到问题,开发人员只能通过在代码中增加日志打印的方法,去寻找可能造成问题的原因,由于日志打印的代码调整后,又需要重新部署到tomcat容器里,而重新启动java web服务的过程又影响其他用户使用,这在没有集群的场景下,无形中给开发人员排查问题造成了困难;2、有时即使增加了日志打印,但由于一些安全原因比较难进入服务器查看相关日志,只能由安全管理部门的人在其他时间拷贝给开发人员,严重影响问题处理效率。
3、因此,如何提供一种代码在线调试方法,实现提升代码调试的便捷性以及效率,成为一个亟待解决的技术问题。
技术实现思路
1、本专利技术要解决的技术问题,在于提供一种代码在线调试方法,实现提升代码调试的便捷性以及效率。
2、本专利技术是这样实现的:一种代码在线调试方法,包括如下步骤:
3、步骤s10、基于jpda协议开启jvm调试代理服务器的调试端口;
4、步骤s20、接收浏览器基于http协议发送的断点开启请求,解析所述断点开启请求获取断点配置参数;
5、步骤s30、基于所述断点开启请求以及调试端口与jv
6、步骤s40、通过所述jvm虚拟机获取事件管理器,删除所述事件管理器下的所有旧断点,基于所述断点配置参数在事件管理器中创建并激活新断点;
7、步骤s50、对各所述新断点关联的断点请求进行堵塞,等待调试事件;
8、步骤s60、基于所述调试事件对代码在线调试。
9、进一步的,所述步骤s10具体为:
10、基于jpda协议对jvm调试代理服务器中,tomcat安装目录下的bin目录的catalina.bat批处理文件进行配置,进而开启所述jvm调试代理服务器的调试端口。
11、进一步的,所述步骤s20具体为:
12、接收浏览器基于http协议发送的断点开启请求,解析所述断点开启请求获取至少包括需要调试的类名、服务器ip、断点标签、服务端口以及代码位置的断点配置参数,并对所述断点配置参数进行齐全性与合法性的校验。
13、进一步的,所述步骤s30具体包括:
14、步骤s31、基于所述断点开启请求以及调试端口向jvm调试代理服务器发送第一握手请求;
15、步骤s32、所述jvm调试代理服务器对接收的第一握手请求进行校验后,反馈第一握手响应,进而建立握手连接;
16、步骤s33、所述jvm调试代理服务器向jvm虚拟机发送第二握手请求;
17、步骤s34、所述jvm虚拟机对接收的第二握手请求进行校验后,反馈第二握手响应,进而建立握手连接。
18、进一步的,所述步骤s40具体包括:
19、步骤s41、向所述jvm调试代理服务器发送事件管理器获取请求,所述jvm调试代理服务器将接收的事件管理器获取请求转发给jvm虚拟机;
20、步骤s42、所述jvm虚拟机接收到事件管理器获取请求后,通过所述jvm调试代理服务器返回事件管理器;
21、步骤s43、删除所述事件管理器下的所有旧断点;
22、步骤s44、从所述jvm虚拟机获取线程引用对象以及位置对象;
23、步骤s45、基于所述断点配置参数、线程引用对象以及位置对象,在所述事件管理器中创建并激活新断点。
24、进一步的,所述步骤s60具体为:
25、基于所述调试事件对代码进行单步调试或者并发调试的在线调试。
26、进一步的,所述单步调试具体为:
27、接收浏览器基于http协议发送的单步调试请求,对所述单步调试请求携带的调试参数进行校验后,在所述事件管理器中创建单步调试事件,并设置所述单步调试事件的调试策略为线程调试;
28、从所述jvm虚拟机中获取事件队列,从所述事件队列中获取单步调试事件,从所述单步调试事件的线程中获取线程引用,通过所述线程引用获取栈帧信息,从所述栈帧信息获取引用对象并解析得到变量数据;
29、从jdi提供的objectreference对象里取出所有的field对象,循环遍历各所述filed对象下的value,将所述field对象和value重新整合到需要返回的map中;
30、基于所述变量数据以及map对代码进行调试。
31、进一步的,所述调试参数至少包括需要调试的类名以及断点标签。
32、进一步的,所述并发调试具体为:
33、通过所述jvm调试代理服务器对接收的若干个调试请求进行并发调试。
34、本专利技术的优点在于:
35、1、通过开启jvm调试代理服务器的调试端口,接收浏览器基于http协议发送的断点开启请求并解析获取断点配置参数,接着基于断点开启请求以及调试端口与jvm调试代理服务器握手连接后,jvm调试代理服务器与jvm虚拟机握手连接,接着通过jvm虚拟机获取事件管理器,删除事件管理器下的所有旧断点,基于断点配置参数在事件管理器中创建并激活新断点,接着对各新断点关联的断点请求进行堵塞,等待调试事件,最后基于调试事件对代码进行单步调试或者并发调试的在线调试;即在线对代码进行调试,无需像传统上在代码中增加日志打印,也无需进入服务器查看相关日志,进而极大的提升了代码调试的便捷性以及效率。
36、2、本专利技术使用浏览器或者http工具即可进行在线的代码调试,操作便利。
37、3、本专利技术在不进入服务器的情况下,可在任意能连接到服务器的内网的电脑上执行远程调试,一方面可以使用业务数据模拟问题,另一方面也不需要依赖他人提供日志文件,大大提高了出现问题时调试的时效性。
38、4、由于http断点可以在任何操作系统和设备上使用,只要有一个支持http协议的浏览器即可,这增加了系统的灵活器和可访问性,无论开发者使用windows、macos、linux还是移动设备,都可以使用。
39、5、浏览器或者工具断点时,可以查看当前所有的变量信息以及循环中的变量。
本文档来自技高网...【技术保护点】
1.一种代码在线调试方法,其特征在于:包括如下步骤:
2.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤S10具体为:
3.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤S20具体为:
4.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤S30具体包括:
5.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤S40具体包括:
6.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤S60具体为:
7.如权利要求6所述的一种代码在线调试方法,其特征在于:所述单步调试具体为:
8.如权利要求7所述的一种代码在线调试方法,其特征在于:所述调试参数至少包括需要调试的类名以及断点标签。
9.如权利要求6所述的一种代码在线调试方法,其特征在于:所述并发调试具体为:
【技术特征摘要】
1.一种代码在线调试方法,其特征在于:包括如下步骤:
2.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤s10具体为:
3.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤s20具体为:
4.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤s30具体包括:
5.如权利要求1所述的一种代码在线调试方法,其特征在于:所述步骤...
【专利技术属性】
技术研发人员:黄家昌,陈文杰,杨辉,王志坚,林鑫,
申请(专利权)人:福建亿能达信息技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。