debug技巧之远程调试

debug · 浏览次数 : 17

小编点评

**前言** 由于线上应用不能随意启停,当线上出现BUG时,定位问题比较困难。而IntelliJ IDEA 提供了一个方便的远程调试功能,可以帮助开发者快速定位和解决线上BUG。 **Step 1:配置远程调试端口** 1. 在运行的 Java 应用程序中启用远程调试功能。 2. 在 IntelliJ IDEA 中找到 “Edit Configurations” > “Remote JVM Debug”。 3. 输入远程调试的配置,包括名称、主机地址和远程调试端口。 4. 启动远程调试,当应用运行并启用了远程调试功能后,IntelliJ IDEA 将自动检测到它。 **Step 2:调试程序** 1. 在代码中设置断点,等待程序执行到断点处。 2. 可以在远程调试界面中检查变量、调用栈和程序状态。 3. 调整断点设置,以跳过特定代码段。 **Step 3:注意事项** * 请确保防火墙设置允许调试端口的通信。 * 在调试过程中保持网络连接稳定。 * 停止远程调试时,关闭所有连接。 **结论** IntelliJ IDEA 的 Remote JVM Debug 功能提供了快速定位和解决线上BUG的全新方案。建议定期使用该功能,以确保程序稳定运行。

正文

一、前言

大家好啊,我是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技巧之远程调试相似的内容:

debug技巧之远程调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 当我们的应用发布到线上之后,就不能随意启停了,但如果线上出现了BUG怎么办呢?大多数时候我们会借助线上打印的日志进行排查问题,如果幸运的话

debug技巧之使用Arthes调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 前面我介绍了本地调试和远程调试,今天再加一种:利用Arthes进行调试。 二、Arthes是什么? 以下是Arthes官网原文: 通常,本

debug技巧之本地调试

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 如果看过我文章的同学应该知道我是一个Java开发,平时都是Spring全家桶。后端和前端虽说都是写代码,但调代码的时候还是有点不同的,前端可以con

[转帖]gdb进阶调试技巧

https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作。基本的gdb操作就不在这里赘述了。 打印各种变量x 命令在gdb中可以使用x命令,来打印内存中的值。具体的格式是x/nfu addr。 含义为以f格

顺应潮流,解放双手,让ChatGPT不废话直接帮忙编写可融入业务可运行的程序代码(Python3.10实现)

众所周知,ChatGPT可以帮助研发人员编写或者Debug程序代码,但是在执行过程中,ChatGPT会将程序代码的一些相关文字解释和代码段混合着返回,如此,研发人员还需要自己进行编辑和粘贴操作,效率上差强人意,本次我们试图将ChatGPT直接嵌入到代码业务中,让ChatGPT生成可以直接运行的代码。

我的日常AI使用

从去年年初开始,AI技术真正走入了我们的日常生活。从OpenAI到如今字节跳动的coze,我们通过AI大模型可以做很多事情,工具和平台众多,如何选择和使用有必要总结一下。 编程和debug方面 尽管gpt-4和gpt-4o确实很强,但对于持续代码改进和代码调试方面,依然不够好,并且它对于非Plus会

我又学会了使用Range实现网络文件下载的断点续传

目录前言1、Range请求头1.1、概述1.2、使用限制1.3、范围请求1.4、预防资源变更2、断点续传下载实现2.1、流程设计2.2、代码实现2.3、运行结果3、RandomAccessFile4、思维拓展参考资料 前言 在某次摸鱼的过程中,老大突然后面冒出来说要做一个拉取文件到本地的需求(写的时

Yolov8和Yolov10的差异以及后处理实现

Yolo模型可分为4个维度的概念 模型版本、数据集、模型变体(Variants)、动态/静态模型。 Yolo各模型版本进展历史 Yolov(2015年华盛顿大学的 Joseph Redmon 和 Ali Farhadi 发布)Yolov2(2016年Joseph Redmon发布)Yolov3(20

KU FPGA FLASH boot失败debug

原因 新板子回来后,测试flash 烧录正常,但是无法BOOT,此时SPI设置为X4模式,使用内部时钟,速度90M。烧录过程不报错,校验也正常。 FLASH理论支持最大速度108M,90M应该还好。另外板卡预留了EMCCLK外部时钟模式,速率100M 也不可行。 此时约束如下: set_proper

[转帖]打造自己的K8s debug image

https://cloud.tencent.com/developer/article/1932186?areaSource=&traceId= 生产上,有时候为了便于调试,会需要用到一些dig curl等工具,这里提供一个很好用的 docker image 集成了如下工具: tcpdump hto