一种远程调试线上Java应用的方法及装置制造方法及图纸

技术编号:37152262 阅读:14 留言:0更新日期:2023-04-06 22:09
本发明专利技术涉及TCP/IP连接技术领域,具体提供了一种远程调试线上Java应用的方法,首先调试模块连接到目标应用所在服务器,建立数据通信,对应用代码反编译,通过专用的调试接口将可视化模块传递的断点指令发送到被调试应用进程,并采集调试信息以及反编译代码段传递给可视化模块;所述可视化模块提供WEB展示界面,以文本形式查看调试模块反编译后的代码段,通过在指定代码位置添加标记的方式来插入断点指令,进行单步执行调试操作,查看堆栈信息。与现有技术相比,本发明专利技术能够在不停止应用的情况下,实现断点设置和单步执行调试,并具备读取应用调用堆栈、程序变量等信息,旨在帮助开发人员无侵入性地、及时方便地排查线上应用故障,保障应用的高稳定性及可用性。保障应用的高稳定性及可用性。保障应用的高稳定性及可用性。

【技术实现步骤摘要】
一种远程调试线上Java应用的方法及装置


[0001]本专利技术涉及TCP/IP连接
,具体提供一种远程调试线上Java应用的方法及装置。

技术介绍

[0002]在线上Java应用出现故障时,大部分情况要依靠应用日志来分析推测故障原因。采用这种方法耗费时间较长,且效率低下,因此远程调试正发挥着越来越重要的作用。由于计算机软件的特性,在软件执行过程中无法观察到指令执行的具体情况,暂时中断软件运行的断点调试成为了帮助开发人员快速解决软件故障的有效手段。然而在一些情景下,应用服务器可能不具备本地调试的能力,例如服务器可能缺少运行本地调试的内存及CPU资源,可能没有运行本地调试器的能力,或者服务器机房位置较远。
[0003]面对这种普遍的情况,有效的解决方式就是通过网络通信,让开发人员进行远程调试。

技术实现思路

[0004]本专利技术是针对上述现有技术的不足,提供一种实用性强的远程调试线上Java应用的方法。
[0005]本专利技术进一步的技术任务是提供一种设计合理,安全适用的远程调试线上Java应用的装置。
[0006]本专利技术解决其技术问题所采用的技术方案是:
[0007]一种远程调试线上Java应用的方法,首先调试模块连接到目标应用所在服务器,建立数据通信,对应用代码反编译,通过专用的调试接口将可视化模块传递的断点指令发送到被调试应用进程,并采集调试信息以及反编译代码段传递给可视化模块;
[0008]所述可视化模块提供WEB展示界面,以文本形式查看调试模块反编译后的代码段,通过在指定代码位置添加标记的方式来插入断点指令,进行单步执行调试操作,查看堆栈信息。
[0009]进一步的,与目标服务器建立连接时,具体步骤如下所示:
[0010](1)利用Socket编程创建一个TCP连接池;
[0011](2)在TCP连接池中,取出一个连接,声明目标服务器地址信息;
[0012](3)进行TCP三次握手,确认收到SYN+ACK信号;
[0013](4)建立数据通信。
[0014]进一步的,获取目标Java应用程序,进行反编译,将反编译后的代码发送给可视化模块,通过服务器操作系统命令获取目标Java应用唯一的PID,通过PID获取目标应用JVM的AttachProvider,利用AttachProvider获取应用JVM的Signal Dispatcher线程从而启动Attach Listener线程。
[0015]进一步的,Attach Listener线程启动后会创建一个socketFile,调试模块能够通
过所述socketFile与Java应用进程通信;
[0016]获取可视化模块传递的断点标记所在类名和代码行数,解析后通过socketFile发送断点指令到目标应用JVM。
[0017]进一步的,目标应用JVM通过JDWP协议接收到断点指令后,访问JVMIT接口传递到底层硬件,在被调试进程空间中指定位置插入汇编指令__asm{int3},暂时中断应用运行;
[0018]将应用执行到断点处的函数的入参、返回值、异常、变量信息、调用堆栈信息发送到可视化模块展示。
[0019]进一步的,将应用执行到断点处函数的参数信息发送到可视化模块展示之后,单步执行调试,自动取消当前位置断点,同时在下一行代码位置插入断点指令,达成单步效果。
[0020]进一步的,所述可视化模块提供WEB展示界面中,文本形式显示调试模块反编译后回传到可视化模块的代码片段,并显示源代码行号,点击代码片段某一行添加标记,表示在该行插入断点指令;
[0021]插入断点后点击单步执行,进行单步执行调试操作,图形化界面展示应用运行到断点处的方法栈、全局变量和成员变量调试信息。
[0022]一种远程调试线上Java应用的装置,包括:至少一个存储器和至少一个处理器;
[0023]所述至少一个存储器,用于存储机器可读程序;
[0024]所述至少一个处理器,用于调用所述机器可读程序,执行一种远程调试线上Java应用的方法。
[0025]本专利技术的一种远程调试线上Java应用的方法及装置和现有技术相比,具有以下突出的有益效果:
[0026]本专利技术提供了一个远程对线上Java应用进行调试的方法,能够在不停止应用的情况下,实现断点设置和单步执行调试,并具备读取应用调用堆栈、程序变量等信息,旨在帮助开发人员无侵入性地、及时方便地排查线上应用故障,保障应用的高稳定性及可用性。
附图说明
[0027]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0028]附图1是一种远程调试线上Java应用的方法的流程示意图;
[0029]附图2是一种远程调试线上Java应用的方法中调试模块的流程示意图。
具体实施方式
[0030]为了使本
的人员更好的理解本专利技术的方案,下面结合具体的实施方式对本专利技术作进一步的详细说明。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本专利技术保护的范围。
[0031]下面给出一个最佳实施例:
[0032]如图1所示,本实施例中的一种远程调试线上Java应用的方法,首先调试模块连接到目标应用所在服务器,建立数据通信,对应用代码反编译,通过专用的调试接口将可视化模块传递的断点指令发送到被调试应用进程,并采集调试信息以及反编译代码段传递给可视化模块;
[0033]可视化模块提供WEB展示界面,以文本形式查看调试模块反编译后的代码段,通过在指定代码位置添加标记的方式来插入断点指令,进行单步执行调试操作,查看堆栈信息。
[0034]在调试模块中:
[0035]具体步骤如下:
[0036](1)与目标服务器建立连接:
[0037]利用Socket编程创建一个TCP连接池,在TCP连接池中,取出一个连接,声明目标服务器地址信息,进行TCP三次握手,确认收到SYN+ACK信号,建立数据通信。
[0038](2)获取目标Java应用程序,进行反编译,将反编译后的代码发送给可视化模块。
[0039](3)通过服务器操作系统(如Linux)命令获取目标Java应用唯一的PID(进程识别号)。
[0040](4)通过PID获取目标应用JVM的AttachProvider,利用AttachProvider获取应用JVM的Signal Dispatcher线程从而启动Attach Listener线程。
[0041](5)Attach Listener线程启动后会创建一个socke本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种远程调试线上Java应用的方法,其特征在于,首先调试模块连接到目标应用所在服务器,建立数据通信,对应用代码反编译,通过专用的调试接口将可视化模块传递的断点指令发送到被调试应用进程,并采集调试信息以及反编译代码段传递给可视化模块;所述可视化模块提供WEB展示界面,以文本形式查看调试模块反编译后的代码段,通过在指定代码位置添加标记的方式来插入断点指令,进行单步执行调试操作,查看堆栈信息。2.根据权利要求1所述的一种远程调试线上Java应用的方法,其特征在于,与目标服务器建立连接时,具体步骤如下所示:(1)利用Socket编程创建一个TCP连接池;(2)在TCP连接池中,取出一个连接,声明目标服务器地址信息;(3)进行TCP三次握手,确认收到SYN+ACK信号;(4)建立数据通信。3.根据权利要求2所述的一种远程调试线上Java应用的方法,其特征在于,获取目标Java应用程序,进行反编译,将反编译后的代码发送给可视化模块,通过服务器操作系统命令获取目标Java应用唯一的PID,通过PID获取目标应用JVM的AttachProvider,利用AttachProvider获取应用JVM的Signal Dispatcher线程从而启动Attach Listener线程。4.根据权利要求3所述的一种远程调试线上Java应用的方法,其特征在于,Attach Listener线程启动后会创建一个socketFile,调试模块能够通过所述socke...

【专利技术属性】
技术研发人员:吕硕张雪莲马利强
申请(专利权)人:浪潮软件集团有限公司
类型:发明
国别省市:

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

1