debug技巧之远程调试
一、前言
大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。
当我们的应用发布到线上之后,就不能随意启停了,但如果线上出现了BUG怎么办呢?大多数时候我们会借助线上打印的日志进行排查问题,如果幸运的话很快就可以定位到问题,但不幸的话就麻烦了。首先出错的地方可能根本没有打印日志或者日志打印不全,其次有可能本地是好好的但线上就是不行,总之倒霉的时候喝凉水都塞牙。。。
每当碰到这个情况我就在想,要是我能像本地调试一样调试线上的代码就好了,保证很快就可以排查出问题。之前经验少,以为我这个想法不可能实现,后来才发现只有我想不到,没有别人做不到的,这种远程调试的方式真的有,而且实现起来还挺简单。
接下来我就给大家介绍一下IntelliJ IDEA 自带的Remote JVM Debug帮助我们实现远程调试。
IntelliJ IDEA 提供了一个非常有用的功能,即远程调试(Remote JVM Debug)。这个功能允许开发者在不重启应用的情况下,连接到一个正在运行的 Java 应用程序,并进行调试。
二、Remote JVM Debug
1. 配置远程调试端口
首先,你需要在运行的 Java 应用程序中启用远程调试功能。这通常是通过在启动应用程序时添加 JVM 参数来实现的:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar demo.jar
这里以 5005 端口为例,suspend=n 表示 JVM 启动时不会暂停,直到调试器连接上。例如这样:

注意:
-agentlib和-jar顺序不要搞反了,否则无法启动监听。
2. 启动 IntelliJ IDEA 的远程调试
(1)找到Edit Configurations...

(2)点击左上角的 "+" 号,选择 "Remote JVM Debug"

(3)输入远程调试的配置
- 在 "Name" 字段中输入配置名称。
- 在 "Host" 字段中输入运行 Java 应用程序的主机地址(如果是本机,可以使用 localhost)。
- 在 "Port" 字段中输入你之前设置的远程调试端口(例如:5005)。

(4)启动远程调试
当你的 Java 应用程序运行并且已经启用了远程调试功能后,IntelliJ IDEA 应该能够检测到它。如果一切正常,IDEA 将显示一个对话框,提示一个远程 JVM 正在尝试连接,就像下图所示。

进到这个界面,说明你成功进入了远程调试,现在你可以在代码中设置断点,就像在本地调试一样。当程序执行到断点处时,它将暂停,允许你检查变量、调用栈和程序状态。
(5)不要让断点卡主整个进程
由于远程调试执行到断点处,整个项目都会被卡住,这个时候就需要对该断点设置一下。

3. 注意事项
- 确保防火墙设置允许调试端口的通信。
- 如果你的应用程序已经在运行,并且没有启用远程调试,你可能需要重启它。
- 在调试过程中,保持网络连接稳定,以避免调试会话中断。
- 这个远程调试相当于开了个后门,调试结束之后要记得及时关闭。
三、小结一下
Remote JVM Debug给我们排查线上BUG提供了一份新的方案,什么情况下用,什么时候使用这个看个人。对于我来说,排查线上BUG首先还是看日志,其实是利用arthes,最后实在搞不定才会使用Remote JVM Debug,我是不太建议经常使用远程调试,建议线下测试,防止造成生产数据破坏或泄漏。
debug技巧之远程调试的更多相关文章
- 一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
一:背景 1. 讲故事 每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇: 我去,本地环境代码跑的哧溜,上了测试环境出问题 ...
- tomcat开发远程调试端口以及利用eclipse进行远程调试
一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...
- 利用PyCharm进行Python远程调试
背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了. ...
- Eclipse远程调试hadoop源码
1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...
- SpringBoot工程+热部署进行远程调试
本文转载自:https://blog.csdn.net/qq_31868349/article/details/78553901 SpringBoot工程+热部署进行远程调试 本地端添加配置 在pom ...
- hadoop下远程调试方法
JPDA 简介Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用 ...
- Tomcat配置远程调试
===========方法1================================ tomcat7 :catalina.bat jpda start,调试端口默认为8000 ======== ...
- python基础===利用PyCharm进行Python远程调试(转)
原文链接:利用PyCharm进行Python远程调试 背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是 ...
- 开启Java远程调试
在JDK启动时,加入 -Xrunjdwp:transport=dt_socket,address=9900,server=y,suspend=n -Dcom.sun.management.jmxrem ...
- Intellij IDEA远程调试tomcat
1.windows系统 文件catalina.bat首行增加下面代码 set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE ...
随机推荐
- 在nginx中使用proxy protocol协议
目录 简介 proxy protocol在nginx中应用 在nginx中配置使用proxy protocol 在nginx中启用proxy protocol 使用Real‑IP modules 请求 ...
- 李俊刚:我是如何在OpenHarmony完成ap6275s WiFi驱动的HDF适配工作的?
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 李俊刚 深圳开鸿数 ...
- Solr安全控制,开启基本身份验证
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景:solr默认安装没带权限控制,每次进入页面直接操作都有点裸奔的感觉. 一.SolrCloud集群模式 说明:要使用基本身份验证您必 ...
- jemter返回结果中文乱码
如图,返回的结果,中文出现乱码 对于这个问题有两种解决方法 第一种:修改jemeter文件,需要重启jemter 在 bin 目录下,找到 jmeter.properties 这个文件,修改编码格 ...
- Harbor仓库高可用
一.搭建两台Harbor 搭建方法参考:https://www.cnblogs.com/hanfuming/p/15750031.html 二.两台新建相同项目 三.第二台harbor上仓库管理中新建 ...
- Pytorch-实战之对Himmelblau函数的优化
1.Himmelblau函数 Himmelblau函数: F(x,y)=(x²+y-11)²+(x+y²-7)²:具体优化的是,寻找一个最合适的坐标(x,y)使得F(x,y)的值最小. 函数的具体图像 ...
- 英文A+B
A+B 题目描述 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A ...
- leetcode:1381. 设计一个支持增量操作的栈
1381. 设计一个支持增量操作的栈 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,ma ...
- 第四章:if else switch使用
/* * @Issue: 输入整数a和b,若a²+b²大于100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和 * @Author: 一届书生 * @LastEditTime : ...
- Linux下的常见基本指令
pwd //显示当前用户所在的路径 ls //显示当前路径下的文件名或者目录名称 ls-l //显示当前路径下的文件或者目录的更详细的属性信息 cd 一个目录路径 //进入一个目录,进去后,可以用pw ...