Java Remote Debug(idea远程调试)

Wesley13
• 阅读 1671

概述

对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时。今天咱们来了解了解Java远程调试这个牛逼的功能,本文以Intellij IDEA为例讲解怎么使用远程调试。以Thrift入门教程这篇文章中使用的程序作为例子。这个程序由Thrift服务端和客户端组成。描述一下远程调试需要解决的问题:

服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。

下面按照步骤介绍怎么远程debug。

使用特定JVM参数运行服务端代码

要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}

其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。

配置步骤

1.本地idea配置

打开Intellij IDEA,在顶部靠右的地方选择”Edit Configurations…”,进去之后点击+号,选择”Remote”,按照下图的只是填写红框内的内容,其中host为远程代码运行的机器的ip/hostname,port为上一步指定的debug_port,本例是5555
Java Remote Debug(idea远程调试)

然后点击Apply,最后点击OK即可

注:其中host为远程服务器地址 Port为自定义端口

 保留JVM参数(服务器配置时使用)

Java Remote Debug(idea远程调试) Java Remote Debug(idea远程调试)

 2.服务器配置

修改启动脚本(start.sh)--田间JVM参数nohup /usr/java/jdk1.8.0_40/bin/java -jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y Appserver.jar --spring.config.locaton=./application.yml --logging.config=./logback.xml &说明一下DEBUG选项参数的意思:

-XDebug 启用调试

-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport  用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=2345调试服务器监听的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。

注:还有一个细节是-jar参数不能写到-Xug参数前,像这样无法启用调试(如图)
java -jar Appserver.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y

Java Remote Debug(idea远程调试)

 3.idea启动debug模式

现在在上一步选择”Edit Configurations…”的下拉框的位置选择上一步创建的remote的名字,然后点击右边的debug按钮(长的像臭虫那个),看控制台日志,如果出现类似“Connected to the target VM, address: ‘xx.xx.xx.xx:5555’, transport: ‘socket’”的字样,就表示连接成功过了。
Java Remote Debug(idea远程调试)

设置断点,开始调试

远程debug模式已经开启,现在可以在需要调试的代码中打断点了,比如:
Java Remote Debug(idea远程调试)

如图中所示,如果断点内有√,则表示选取的断点正确。

现在在本地发送一个到远程服务器的请求,看本地控制台的bug界面,划到debugger这个标签,可以看到当前远程服务的内部状态(各种变量)已经全部显示出来了,并且在刚才设置了断点的地方,也显示了该行的变量值。
Java Remote Debug(idea远程调试)
Java Remote Debug(idea远程调试)

参考

https://blog.csdn.net/helllochun/article/details/40890277

https://www.cnblogs.com/wy2325/p/5600232.html

idea2019:

https://www.cnblogs.com/virgosnail/p/10560738.html

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java反序列化——apache
看了好久的文章才开始分析调试java的cc链,这个链算是java反序列化漏洞里的基础了。分析调试的shiro也是直接使用了cc链。首先先了解一些java的反射机制。一、什么是反射反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性
Karen110 Karen110
3年前
求你了,别再用 print 调试代码了
大家好,我是明哥。对于每个程序开发者来说,调试几乎是必备技能。代码写到一半卡住了,不知道这个函数执行完的返回结果是怎样的?调试一下看看代码运行到一半报错了,什么情况?怎么跟预期的不一样?调试一下看看调试的方法多种多样,不同的调试方法适合不同的场景和人群。如果你是刚接触编程的小萌新,对很多工具的使用还不是很熟练,那么print和log大法好
Wesley13 Wesley13
3年前
IDEA工具的安装、破解与配置
一、什么是IDEA?IDEA全称IntelliJIDEA,是java编程语言开发的集成环境,是目前最好用的java集成开发工具。他最突出的功能是调试(Debug),可以对Java代码,JavaScript,JQuery,Ajax等技术进行调试。例如查看Map类
Wesley13 Wesley13
3年前
vivo Y71的USB调试模式在哪里,开启vivo Y71USB调试模式的流程
就在我们使用安卓手机通过数据线连接到电脑的时候,如果手机没有开启usb开发者调试模式,电脑则没能成功识别我们的手机,部分工具也没能正常使用,此情况我们需要找解决方法将手机的usb开发者调试模式打开,以下内容我们讲解vivoY71如何开启usb开发者调试模式的方法。首先,在vivoY71应用程序界面点中“设置”ICON,进入vivoY71系统“设置”
Wesley13 Wesley13
3年前
Java线程Dump分析工具
jstack用于打印出给定的java进程ID或corefile或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"Jd64",Windows的jstack使用方式只支持以下的这种方式:jstacklFpid如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java
Wesley13 Wesley13
3年前
mongo
搭建调试环境,调试CVE201910758漏洞,学习nodejs沙箱绕过,以及nodejs远程调试。目前网上关于该漏洞的基于docker的远程调试分析写的很泛,本文从初学者角度分析调试漏洞成因,特别是在chrome浏览器调试nodejs上花了点篇幅。0x01认识mongoexpressmongoexpress是一个Mong
Stella981 Stella981
3年前
IDEA远程调试服务端的java项目
服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。使用远程调试的JVM参数运行服务端代码XdebugXrunjdwp:transportdt_socket,suspendn,server
Wesley13 Wesley13
3年前
Visual Studio Code 1.35更新:远程开发终于来啦
前段时间大家可能看过一个新闻:微软为VSC开发一款名为RemoteDevelopment的扩展程序,可以让我们使用本地VSC开发和调试远程机器上的代码。这个功能对于我这个不会使用vim等linux工具的人来说,简直是一个重大消息。可惜的是,当时远程开发插件还处于测试当中,只能在VSCInsider也就是测试版中使用。如今VSC更新到了1.35,增加了许多
铁扇公主 铁扇公主
1年前
Python编辑开发 pycharm pro v2023.1.3
PyCharmPro提供了完整的Python开发环境,包括语法突出显示、代码完成、代码检查和自动重构等工具。强大的调试功能:PyCharmPro支持多种调试器,包括本地和远程调试。它还提供了交互式调试、断点调试和多进程调试等高级功能。高效的Web开发:Py