IDEA使用技巧
IDEA 使用技巧:从入门到飞起
工欲善其事,必先利其器。IntelliJ IDEA 是 Java 开发者的主力 IDE,但大多数人只用到了它 20% 的能力。这篇文章聚焦三个方面:远程调试、高效 Debug 技巧、必装插件——掌握这些,开发效率至少翻一倍。
一、远程调试
线上出了 bug,光看日志找不到原因怎么办?远程调试就是你的"千里眼",让你直接在本地 IDEA 中 Debug 远程服务器上的代码。
1.1 工作原理
远程调试基于 JDWP(Java Debug Wire Protocol),简单来说就是 JVM 提供了一个调试接口,本地的调试器通过网络连上去,就能像调试本地程序一样控制远程 JVM——设断点、单步执行、查看变量值。
1.2 配置步骤
第一步:远程服务启动时加上调试参数
JDK 5-8:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000JDK 9+(需要加 *: 允许远程连接):
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000几个参数解释:
transport=dt_socket:使用 socket 传输server=y:JVM 作为调试服务端等待连接suspend=n:启动时不暂停,服务正常运行。改成y则服务会等调试器连上才继续启动——适合调试启动阶段的问题address=8000:调试端口
第二步:IDEA 中配置远程连接
- 打开 Run → Edit Configurations
- 点击 "+" 号,选择 "Remote JVM Debug"
- 填写远程服务器的 Host 和 Port(与上面的 address 对应)
- 点击 OK 保存
第三步:在代码中设好断点,点 Debug 按钮连接
连接成功后,当远程服务执行到你设断点的代码时,就会停下来,跟本地调试完全一样——可以查看变量、单步执行、条件判断。
1.3 注意事项
- 代码版本必须一致:本地代码和远程部署的版本必须完全相同,否则断点位置对不上,行号会错乱
- 不要在生产环境长时间挂调试器:断点会阻塞请求线程,挂太久可能导致请求超时甚至服务不可用
- 网络可达性:调试端口要确保本地能访问到,注意防火墙和安全组配置
- 预发环境优先:尽量在预发而非生产环境做远程调试,预发出了问题影响面小
- 用完就关:调试完毕及时断开连接,移除远程服务的调试参数并重启
二、高效调试技巧
2.1 多线程 Debug
默认情况下,IDEA 的断点模式是 "All"——所有线程共享一个断点状态,一个线程停下来后其他线程可能已经跑完了。这在调试多线程程序时非常不方便,因为你只能看到其中一个线程的执行过程。
解决办法:在断点上右键,把 "Suspend" 从 "All" 改成 "Thread"。
改完之后,每个线程执行到断点时都会独立暂停,你可以在 IDEA 的 Threads & Frames 面板中切换不同线程来逐一排查。
public class MultiThreadDebug {
public static void main(String[] args) {
Runnable task = () -> {
// 在这里设断点,右键改成 Thread 模式
System.out.println(Thread.currentThread().getName() + " running");
};
new Thread(task, "thread-1").start();
new Thread(task, "thread-2").start();
new Thread(task, "thread-3").start();
}
}改成 Thread 模式后,三个线程都会在断点处暂停,你可以逐个切换查看每个线程的执行状态。不改的话,可能只有 thread-1 停下来,另外两个直接跑完了。
2.2 条件断点
有些断点你不希望每次都停下来,只想在满足特定条件时才暂停。比如一个循环遍历了 10000 个用户,你只关心 userId = 9527 的那个:
右键断点 → 在 Condition 输入框中写条件表达式:
user.getId() == 9527这样断点只在条件为 true 时触发,省去了你反复点"继续"的痛苦。
条件断点还支持更复杂的表达式,甚至可以调用方法:
"ERROR".equals(response.getStatus()) && response.getCode() > 5002.3 日志断点(不暂停的断点)
有时候你不想让程序停下来,只是想在某个位置输出一些信息,但又不想改代码加 log。
右键断点 → 取消勾选 "Suspend" → 勾选 "Log message to console" 或 "Evaluate and log"。
Evaluate and log: "userId=" + user.getId() + ", status=" + response.getStatus()这样每次执行到断点位置,会在控制台打印你指定的信息,但程序不会暂停。非常适合在不方便改代码的场景下做临时追踪。
2.4 表达式求值
Debug 过程中,按 Alt + F8(Mac:Option + F8)可以打开 Evaluate Expression 窗口,在里面执行任意 Java 表达式:
- 查看某个变量的某个字段值:
user.getAddress().getCity() - 调用某个方法看返回值:
orderService.calculateTotal(order) - 做简单的计算验证:
price * quantity * 0.85 - 修改变量值:
user.setStatus("ACTIVE")(注意这会真的改变运行时的变量)
这个功能在排查复杂对象状态时特别好用,不需要加 print 语句重新跑。
2.5 热部署(HotSwap)
改了一行代码就要重启整个应用?大型 Spring Boot 项目启动可能要 2-3 分钟,一天改 20 次就浪费了一个小时。
IDEA 支持在 Debug 模式下进行热替换:
- 修改方法体内的代码(注意:不能改方法签名和类结构)
- 按
Ctrl + Shift + F9(Mac:Cmd + Shift + F9)编译当前文件 - IDEA 会自动把修改后的字节码替换到正在运行的 JVM 中
- 下次执行到这个方法时,就是新的逻辑了
限制:JVM 原生的 HotSwap 只支持方法体内的修改。以下情况需要重启:
- 新增/删除字段
- 新增/删除方法
- 修改方法签名
- 修改类的继承关系
如果需要更强大的热部署能力,可以考虑:
- spring-boot-devtools:Spring Boot 官方工具,通过双类加载器实现快速重启
- JRebel:商业插件,支持几乎任何修改的热部署
- DCEVM:修改过的 JVM,扩展了原生 HotSwap 的能力
2.6 其他实用调试技巧
强制返回(Force Return):在 Debug 中右键方法帧 → Force Return,可以指定一个返回值直接跳出当前方法,不执行后续逻辑。适合绕过某个不想执行的代码段。
Drop Frame:回退到当前方法调用前的状态重新执行。注意它不能撤销已经发生的副作用(比如已经写入数据库的数据不会回滚)。
Watch 变量:在 Variables 面板中点击 "+" 号添加 Watch 表达式,让某个复杂表达式的值始终显示在面板中,不用每次都手动去找。
三、必装插件
Maven Helper
打开 pom.xml,底部会多出一个 "Dependency Analyzer" Tab,提供三种视图:
- Conflicts:直接列出所有有冲突的依赖,一目了然
- All Dependencies as List:列表形式查看所有依赖
- All Dependencies as Tree:树形结构查看依赖关系
支持搜索,可以快速定位某个 jar 包的来源。解决依赖冲突时效率提升 10 倍。
Lombok
在 JavaBean 上加 @Data 注解,自动生成 getter/setter/toString/equals/hashCode。告别模板代码,代码量直接砍半。
@Data
public class User {
private String name;
private Integer age;
}
// 编译后自动拥有 getName()、setName()、toString() 等全套方法注意:除了 IDEA 插件,还需要在 pom.xml 中引入 lombok 依赖。IDEA 新版本已经内置了 Lombok 支持,不需要单独安装插件。
阿里巴巴 Java 代码规约
基于《阿里巴巴 Java 开发手册》的代码扫描插件。安装后有三个功能:
- 实时检测:编码时实时提示不规范的写法(比如魔法数字、不规范命名)
- 手动扫描:右键项目/文件 → 编码规约扫描,生成详细报告
- 快速修复:部分问题提供一键修复
强烈建议新手装上,养成规范编码的好习惯。
GsonFormat / GsonFormatPlus
给你一段 JSON,一键生成对应的 Java Bean。使用方法:
- 新建一个 Java 类
- 在类内部按
Alt + Insert→ GsonFormat - 粘贴 JSON 字符串
- 自动生成字段和注解
接口联调时特别好用,省去手动建类的麻烦。
String Manipulation
选中文本后按 Alt + M,弹出一个功能强大的字符串转换菜单:
- 格式转换:camelCase ↔ snake_case ↔ SCREAMING_CASE ↔ kebab-case ↔ PascalCase
- 编码解码:URL、Base64、MD5、Unicode 转换
- 排序处理:按行排序、去重、逆序、按长度排序
- 对齐格式化:按指定分隔符将文本格式化为表格/列对齐
日常开发中写 SQL 字段名、定义常量、处理配置时特别高效。
Key Promoter X
每当你用鼠标点击某个操作时,右下角会弹窗告诉你对应的快捷键。同时还会统计你用鼠标操作的次数——操作次数越多,弹窗提醒越明显。
用上一周,常用快捷键就记住了,从此告别鼠标流。学快捷键最好的方式不是背表,而是让工具在你每次操作时提醒你。
.ignore
右键项目 → New → .ignore File,可以快速生成各种 ignore 文件:
.gitignore:排除 IDEA 配置、target 目录、编译产物.dockerignore:构建 Docker 镜像时排除不需要的文件
内置了各种语言和框架的模板,勾选即可生成,不用自己手写规则。
MyBatisX(免费)
MyBatis 开发必备,提供以下能力:
- Mapper 接口与 XML 文件之间的一键跳转(Java 方法 ↔ XML SQL)
- XML 中 SQL 的自动补全
- 参数自动补全(基于 @Param 注解识别)
- 自动检查 XML 中的 ID 冲突和错误属性值
- 支持 MybatisPlus 的代码生成
比收费的 Mybatis plugin 功能少一些,但日常开发完全够用。
小结
| 技巧 | 核心价值 |
|---|---|
| 远程调试 | 不用登录服务器就能 Debug 远程代码,基于 JDWP 协议 |
| 多线程 Debug | 断点右键改 Thread 模式,每个线程独立暂停 |
| 条件断点 | 只在条件为 true 时暂停,告别反复点"继续" |
| 日志断点 | 不暂停程序,只在控制台打印信息 |
| 表达式求值 | Debug 中 Alt+F8 实时执行表达式,免去加 print 重跑 |
| 热部署 | 改方法体不用重启,Debug 模式下 Ctrl+Shift+F9 |
| 必装插件 | Maven Helper、Lombok、代码规约、Key Promoter X、MyBatisX |
IDEA 的能力远不止写代码,善用调试技巧和插件,是从"能写代码"到"高效开发"的分水岭。花半天时间把这些技巧练熟,换来的是之后每天节省的半小时。
补充:IDEA 高频快捷键速查
与其去背快捷键表,不如先记住这些最高频的操作。装了 Key Promoter X 之后,其他快捷键用多了自然就记住了。
编码类
| 操作 | Windows/Linux | Mac |
|---|---|---|
| 智能补全 | Ctrl + Shift + Space | Cmd + Shift + Space |
| 万能补全 | Alt + Enter | Option + Enter |
| 生成代码(getter/setter/constructor) | Alt + Insert | Cmd + N |
| 重命名 | Shift + F6 | Shift + F6 |
| 提取变量 | Ctrl + Alt + V | Cmd + Option + V |
| 提取方法 | Ctrl + Alt + M | Cmd + Option + M |
| 格式化代码 | Ctrl + Alt + L | Cmd + Option + L |
| 优化 import | Ctrl + Alt + O | Cmd + Option + O |
| 复制当前行 | Ctrl + D | Cmd + D |
| 删除当前行 | Ctrl + Y | Cmd + Backspace |
导航类
| 操作 | Windows/Linux | Mac |
|---|---|---|
| 搜索文件 | Ctrl + Shift + N | Cmd + Shift + O |
| 搜索类 | Ctrl + N | Cmd + O |
| 全局搜索 | Ctrl + Shift + F | Cmd + Shift + F |
| 全局替换 | Ctrl + Shift + R | Cmd + Shift + R |
| 跳转到定义 | Ctrl + B | Cmd + B |
| 查看实现类 | Ctrl + Alt + B | Cmd + Option + B |
| 查看调用方 | Ctrl + Alt + H | Cmd + Option + H |
| 最近打开的文件 | Ctrl + E | Cmd + E |
| 后退/前进 | Ctrl + Alt + Left/Right | Cmd + Option + Left/Right |
调试类
| 操作 | Windows/Linux | Mac |
|---|---|---|
| Debug 启动 | Shift + F9 | Ctrl + D |
| Step Over(下一行) | F8 | F8 |
| Step Into(进入方法) | F7 | F7 |
| Step Out(跳出方法) | Shift + F8 | Shift + F8 |
| 运行到光标处 | Alt + F9 | Option + F9 |
| 表达式求值 | Alt + F8 | Option + F8 |
| 切换断点 | Ctrl + F8 | Cmd + F8 |
| 恢复执行 | F9 | Cmd + Option + R |
版本控制类
| 操作 | Windows/Linux | Mac |
|---|---|---|
| 提交 | Ctrl + K | Cmd + K |
| 推送 | Ctrl + Shift + K | Cmd + Shift + K |
| 拉取 | Ctrl + T | Cmd + T |
| 查看 Git 日志 | Alt + 9 | Cmd + 9 |
| 查看文件修改对比 | Ctrl + D(在 VCS 面板中) | Cmd + D |
补充:IDEA 性能优化
IDEA 本身也是个吃内存的大户,项目大了可能会很卡。几个优化建议:
调大 JVM 内存
修改 IDEA 的 VM 选项(Help → Edit Custom VM Options):
-Xms512m
-Xmx2048m
-XX:ReservedCodeCacheSize=512m默认内存偏小,建议最少给 2G,电脑内存充裕可以给到 4G。
排除不需要索引的目录
大项目中 node_modules、build、dist 等目录不需要被 IDEA 索引。右键目录 → Mark Directory as → Excluded。
排除后这些目录中的文件不会出现在搜索结果中,也不会被 IDEA 分析,大幅减少索引时间和内存占用。
关闭不需要的插件
IDEA 默认安装了很多插件(比如 Android、Ruby、PHP 的支持),如果你只做 Java 开发,可以把不相关的插件全部禁用。在 Settings → Plugins 中操作。
使用 Power Save Mode
临时需要省电或减少 IDEA 后台活动时,可以开启 File → Power Save Mode。开启后 IDEA 会停止后台分析、代码检查等耗资源的操作。需要时再关闭。