熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】(下)

简介: 熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】(下)

断点参数


但是同理,它也提供一个特有的断点参数:


  • Notification:

- “Catch excetion”:程序在捕获(Try Catch)这个异常时激活断点

- “Uncatch excetion”:不catch捕获异常时激活断点


小细节:对于不同类型的断点,打桩后我们看到的图标也是有差异的,如图:

image.png

关于IDEA的远程调试(远程Debug)


远程调试是调试分布式系统的一个利器。因为现在都以微服务部署,你不可能在本地同时启动N个服务来做本地调试。

更重要的是如果测试时候测出发现你的bug,这时候你若想定位问题,通过远程调试直接连接到测试服务(甚至是线上服务)不失为一种最为高效的解决方案,并且它还能有非常好的保护现场的辅助能力~


启动远程调试主要分两步:

image.png

  1. 第一步:要让远程服务器运行的代码支持远程调试,也就是启动的时候必须加上特定的JVM参数:

1. java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${debug_port} demo.jar (适用于JDK8以上)

2. java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} demo.jar(适用于JDK8以下)


   2.第二步:idea使用remote链接远程端口(注意ip:port要对应上):”Edit Configurations” -> “Remote” 配置好后debug启动~~~


当你看到控制台这样的字样,就证明你链接成功了,进而你可以像调试本地代码一样随意的打各种类型的断点进行调试了~

image.png


需要注意的是:远程调试时请确保你本地的代码和远程的一模一样。


Java平台调试体系架构(JPDA)和JDWP(Java Debug Wire Protocol):参考权威文档 JPDA 体系概览

以及 JDWP 远程命令执行漏洞


JDWP协议是个标准协议,我们的Tomcat是支持的,其实tomcat它的catalina.sh文件里有告诉你怎么开启这个端口:

image.png


对上面变量的解析代码如下(注意有些默认值):


image.png

传统Tomcat怎么开启呢


找到入口文件startup.sh,最后一句改为的start前面加上 jpda如下:

exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"


或者在catalina.sh中进行配置:

JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’


这样根据上面的脚本可知,判断第一个参数等于jpda,所以调试端口开放了。


嵌入式Tomcat怎么开启呢?(重要)

这里主要指的SpringBoot环境下如何开启呢?答案见上~


如果想深入了解Java调试,强烈给你推荐去这里看看:深入Java调试体系


总结


本文并没有介绍所有的断点参数,如对话框的右半部分的Catch class filter等等各种filter的参数,因为我觉得没太大的用~~~有兴趣的自行研究哈


另外本文讲述使用的IDE是IntelliJ IDEA,使用Eclipse的用户可以仿照着执行~

相关文章
|
1月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
259 0
|
2月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
133 0
|
4月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
714 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
10月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
521 6
|
5月前
|
IDE Java 开发工具
JetBrains IntelliJ IDEA 2025.1 发布 - 领先的 Java 和 Kotlin IDE
JetBrains IntelliJ IDEA 2025.1 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin IDE
391 2
|
11月前
|
Linux Windows
IDEA如何查看所有的断点(Breakpoints)并关闭
【10月更文挑战第15天】在 IntelliJ IDEA 中,可以通过以下步骤查看和关闭所有断点: 1. 查看所有断点: - 打开断点窗口:菜单栏选择 “View” -> “Tool Windows” -> “Debug”,或使用快捷键 “Alt+2”(Windows/Linux)/“Command+2”(Mac)。 - 在断点窗口中,可以看到所有设置的断点列表,包括文件、行号等信息。 2. **关闭断点**: - 单个断点关闭:在断点窗口中,点击断点左侧的红点图标即可关闭。
4900 2
|
11月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
297 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
11月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
226 6
|
11月前
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
3746 3
|
11月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
1578 1