故障排查实践之代码调试技巧

简介: 本文是Java开发者summo分享的调试技巧,主要介绍本地和远程调试。在本地调试时,注意避免在方法上设置断点导致应用启动缓慢。调试功能如Resume Program、Step over、Step into、Force Step into和Step out对理解执行流程很有帮助。Evaluate Expression是作者最推荐的功能,可用于查看和修改变量值、执行方法等。远程调试通过Remote JVM Debug配置,需注意端口通信、网络稳定和安全性问题。调试是需要不断练习和提升的技能。

一、前言

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。

如果看过我文章的同学应该知道我是一个Java开发,平时都是Spring全家桶。后端和前端虽说都是写代码,但调代码的时候还是有点不同的,前端可以console.log一把梭,但是Java只用System.out.println是不行的,原因也很简单,“前端热部署快,后端慢”,后端总是避不开断点调试的,如果还有没学会断点调试的同学,建议还是学习一下。

好了,废话不多说,开始正文~

二、本地调试

1.debug模式启动应用

image.png

这个还是很简单的,我相信只要不是手抖都不会点错。但是有时候我们会发现平时很快就启动好的应用,突然变得特别慢,好几分钟都启动不好。一般出现这种情况的原因有可能是你将断点打在了方法上,这个IDEA官方也有说明,如下。

image.png

Note that using method breakpoints can slow down the application you are debugging.
使用方法断点会使得正在debug调试的程序变慢。

解决办法有两个
a. 找到方法上断点取消掉
b. 如果断点不好找,直接找到IDEA的BreakPoints全部取消就好了
image.png

2.调试功能

image.png

  • Resume Program(继续程序):当程序处于暂停状态时,点击这个按钮会使得程序继续执行,直到下一个断点或者程序结束。
  • Step over(单步跳过):这个按钮允许你执行当前行的代码,但是不会进入当前行调用的任何方法内部。如果当前行调用了一个方法,那么这个方法的执行会“跳过”,直接执行到这个方法的返回处。
  • Step into(单步进入):与 Step over 不同,Step into 会进入当前行调用的方法内部。如果当前行是一个方法调用,那么程序会暂停在这个方法的第一条可执行行。
  • Force Step into(强制单步进入):这个按钮允许你强制进入一个方法,即使该方法的源代码不可用(例如,它可能是一个第三方库的一部分)。通常,当尝试使用 Step into 进入一个没有源代码的方法时,IDEA 会忽略这个步骤。但是,使用 Force Step into 可以强制程序进入方法,即使没有源代码。
  • Step out(单步返回):当处于一个方法内部时,点击这个按钮会使得程序执行完当前方法的剩余部分,并在方法返回时暂停。这允许你快速退出当前的方法,返回到调用它的代码中。

这些调试功能对于理解程序的执行流程和调试程序中的错误非常有帮助。自己可以多试试。

3.Evaluate Expression

这个功能是我用的最多的,非常好用,强烈推荐!!!

(1)它在哪?

进入debug后,代码区右键打开菜单
image.png

(2)它长啥样?

上面是输入框,下面是输出
image.png

(3)它有什么作用?

  • 查看变量值
  • 修改变量值
  • 执行方法
  • 查看复杂数据结构
  • 调试信息输出
  • ... ...
    不仅上面这些,它甚至可以写一段新的代码执行,我演示几个吧,不然没感觉。

a、查看变量值

image.png
image.png

b、执行方法

image.png
image.png

c、新的代码块

image.png

4. 小结一下

调试Java程序,用IDEA社区版挺方便的。设置断点的时候别太随意,否则启动程序会慢得跟蜗牛似的。用好单步调试,能帮你一步步看清楚程序是怎么跑的。还有那个表达式评估,简直就是调试时的万能钥匙,啥都能干。最后,记得多学多练,调试这门手艺,越磨越亮。

三、远程调试

1.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 启动时不会暂停,直到调试器连接上。例如这样:
image.png

注意:-agentlib-jar顺序不要搞反了,否则无法启动监听。

(2) 启动 IntelliJ IDEA 的远程调试

a、找到Edit Configurations...

image.png

b、点击左上角的 "+" 号,选择 "Remote JVM Debug"

image.png

c、输入远程调试的配置

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

image.png

d、启动远程调试

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

image.png

进到这个界面,说明你成功进入了远程调试,现在你可以在代码中设置断点,就像在本地调试一样。当程序执行到断点处时,它将暂停,允许你检查变量、调用栈和程序状态。

e、不要让断点卡主整个进程

由于远程调试执行到断点处,整个项目都会被卡住,这个时候就需要对该断点设置一下。
image.png

2.注意事项

  • 确保防火墙设置允许调试端口的通信。
  • 如果你的应用程序已经在运行,并且没有启用远程调试,你可能需要重启它。
  • 在调试过程中,保持网络连接稳定,以避免调试会话中断。
  • 这个远程调试相当于开了个后门,调试结束之后要记得及时关闭。

3.小结一下

Remote JVM Debug给我们排查线上BUG提供了一份新的方案,什么情况下用,什么时候使用这个看个人。对于我来说,排查线上BUG首先还是看日志,其实是利用arthes,最后实在搞不定才会使用Remote JVM Debug,我是不太建议经常使用远程调试,建议线下测试,防止造成生产数据破坏或泄漏。

目录
相关文章
|
20天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
1月前
|
SQL 运维 监控
TiDB集群故障排查与恢复
【2月更文挑战第28天】本章将详细探讨TiDB集群故障排查与恢复的方法。我们将介绍常见的故障类型、排查工具与步骤,以及故障恢复的策略与最佳实践。通过本章的学习,读者将能够掌握TiDB集群故障排查与恢复的技术,确保数据库的稳定性和可用性。
|
15天前
|
运维 Kubernetes 调度
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
|
1月前
|
运维 Kubernetes 网络安全
k8s学习-CKA真题-集群故障排查kubelet
k8s学习-CKA真题-集群故障排查kubelet
143 0
|
8月前
|
运维 Kubernetes Shell
Kubernetes —集群故障排查(Kubectl 、telepresence)
Kubernetes —集群故障排查(Kubectl 、telepresence)
94 2
|
8月前
|
JSON 运维 Kubernetes
Kubernetes集群故障排查—使用 crictl 对 Kubernetes 节点进行调试
Kubernetes集群故障排查—使用 crictl 对 Kubernetes 节点进行调试
140 0
|
11月前
|
存储 缓存 JSON
Kubernetes集群故障排查—审计
Kubernetes集群故障排查—审计
134 1
Kubernetes集群故障排查—审计
|
运维 监控 Java
Elasticsearch 集群故障排查及修复指南
Elasticsearch 集群在运行的过程中,由于各种原因,经常会出现健康问题。比较直观的是:kibana监控、head插件监控显示集群非绿色(红色或者黄色)。
1375 0
Elasticsearch 集群故障排查及修复指南
|
运维 监控 安全
《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——导读
目前市场上关于Linux运维管理的书籍有很多,但是普遍存在的问题是模式单一,要么只讲基础理论和系统命令,要么侧重粘贴代码,要么介绍软件的安装与配置,这种模式带有很大的实验性质,并没有介绍生产环境中的实战应用和经验技巧。
2739 0

热门文章

最新文章