首页 > 其他分享 >debug技巧之远程调试

debug技巧之远程调试

时间:2024-05-16 16:08:34浏览次数:18  
标签:Remote Debug JVM 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,我是不太建议经常使用远程调试,建议线下测试,防止造成生产数据破坏或泄漏。

标签:Remote,Debug,JVM,debug,断点,远程,调试
From: https://www.cnblogs.com/wlovet/p/18196083

相关文章

  • 【iOS逆向与安全】iOS远程大师:通过H5后台远程查看和协助iPhone设备
    前言在移动设备测试和远程协助的过程中,能够远程查看和协助iPhone设备是一项非常实用的功能。为了解决这一需求,我开发了一款名为iOS远程大师的产品,允许用户通过H5后台界面查看和协助越狱或非越狱的iPhone设备。本文将详细介绍iOS远程大师的开发过程和技术实现。一、技术实现整......
  • pytorch调试时CUDA报错,如何精确定位
    由于pytorch的python语句执行和CUDA后端实际上是异步执行的,所以当CUDAruntime报错时,并不一定能正确地反映在python抛出的错误语句中,因此,可以添加一个环境变量来实现:CUDA_LAUNCH_BLOCKING=1这里再补充一些关于cuda和pytorch异步执行的知识,当你写了一句torch.mm(X,Y)时,实际上......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——高性能的 gRPC
    远程过程调用RPC——高性能的gRPC gRPC,这一由Google推出的高性能、开源、通用RPC框架,凭借其众多引人注目的特性,已成为业界瞩目的焦点。它基于HTTP/2协议标准设计开发,并采用ProtocolBuffers作为默认的数据序列化协议,广泛支持多种编程语言。gRPC不仅简化了服务的精确定义,而且......
  • Linux远程连接
    Linuxcentos设置静态ip参考:https://blog.csdn.net/weixin_45533131/article/details/128002480FileZilla安装下载与使用参考:https://blog.csdn.net/Passerby_Wang/article/details/125298958FileZilla是免费开源的FTP软件,,分为客户端版本和服务器版本,具备所有的FTP软件功能,......
  • Windows 10开启免密ssh登录&远程端口转发
    安装OpenSSH服务端设置-系统-可选功能-添加功能-在这里搜索OpenSSH服务端,然后开始安装即可开启sshd服务端可以使用图形界面使用命令行执行services.msc找到服务启动即可,并将其设置为自动。可以使用powershell执行命令启动服务启动服务:Start-Servicesshd查看状态:Get-Service......
  • 前端远程办公系列 —— 整体介绍
    整体介绍前言有些公司需要你有远程办公的经验远程办公是某些公司和组织的一种工作方式。比如公司运作以天津为根据地,还有一些团队在武汉,忙不过来时还有外包本系列就以前端工程师的视角,以一个真实的场景来说一下这个事情。会说遇到了什么问题、如何协作、用到什么新工具,什么技......
  • SSH 简介:安全远程访问的利器
    简介SSH(SecureShell)是一种加密网络协议,用于在不安全的网络上安全地传输数据。它最常用于远程登录到计算机系统,并在远程系统上执行命令,也可以用于传输文件。SSH的加密特性使得通信过程安全可靠,成为许多系统管理员和开发者的首选工具。本文将介绍SSH的基本概念、用法和一些实......
  • 关于编译的一些debug记录
    1.背景:现在想将嵌入式开发板部署成边缘控制器,需要在开发板上部署一个服务。我们已经写了一个c语言的应用,现在需要将其编译成适配64位arm架构的2进制可执行文件2.bug:在编译的时,输入命令:g++-fdiagnostics-color=always-gunifiedAccessServer.cppbaseModels/control/ec/ec......
  • gerrit不能访问远程仓库
    配置完ssh链接和config之后还是不能链接远程服务器,并且显示错误Cloninginto'NewNeucyberAcqGUI-WaveformDisplayModule'...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!@@@@@@@@@@@@@@@@@@@@@......
  • Advanced .Net Debugging 8:线程同步
    一、介绍这是我的《Advanced.NetDebugging》这个系列的第八篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第六章【同步】。我们经常写一些多线程的应用程序,写的多了,有关多线程的问题出现的也就多了,因此,最迫切的任务就是提高解决多线程同步问题的能力。这一节......