IDEA 2022
介绍
【尚硅谷IDEA安装idea实战教程(百万播放,新版来袭)】
jetbrains 中文官网
IDEA 官网
IDEA 从 IDEA 2022.1 版本开始支持 JDK 17,也就是说如果想要使用 JDK 17,那么就要下载 IDEA 2022.1 或之后的版本。
公司旗下还有其它产品,比如:
- WebStorm:用于开发 JavaScript、HTML5、CSS3 等前端技术
- PyCharm:用于开发 Python
- PhpStorm:用于开发 PHP
- RubyMine:用于开发 Ruby/Rails
- AppCode:用于开发 Objective - C/Swift
- CLion:用于开发 C/C++
- DataGrip:用于开发数据库和 SQL
- Rider:用于开发 .NET
- GoLand:用于开发 Go
用于开发 Android 的 Android Studio,也是 Google 基于 IDEA 社区版进行迭代的。

IDEA 每一年都会发布一个版本,因此大版本号和年份保持一致。
小版本每一年只会出现 1,2,3,表示第 1 个版本,第 2 个版本和第 3 个版本的意思,不是代表月份。每一年通常都会发布三个小版本。小版本的迭代时间并不是固定的。
Ultimate:旗舰版
Community:社区版
两个不同版本的详细对比,可以参照官网。官网提供的详细使用文档。
IDEA 2022 安装包:
官网
百度网盘
提取码:6666
同一台电脑可以安装多个版本的 IDEA。
卸载和安装
卸载
这里以卸载 2022.1.2 版本为例说明。第一步,在【控制面板】找到【卸载程序】:

右键点击或左键双击 IntelliJ IDEA 2022.1.2 进行卸载:

如果需要保留下述数据,就不要打 √。如果想彻底删除 IDEA 所有数据,那就打上 √。



软件卸载完以后,还需要删除其它几个位置的残留:


安装
第一步,下载完安装包,双击直接安装。
第二步,欢迎安装。

第三步,是否删除电脑上低版本的 IDEA(如果有,可以选择忽略)

如果电脑上有低版本的 IDEA,可以选择删除或保留。这里没有卸载旧版本,如果需要卸载,记得勾选下面的保留旧的设置和配置。
第四步,选择安装目录,目录中要避免中文和空格。


第五步,创建桌面快捷图标等。

确认是否与 .java、.groovy、.kt 、.kts 格式文件进行关联。这里建议不关联。
第六步,在【开始】菜单新建一个文件夹(这里需要确认文件夹的名称),来管理 IDEA 的相关内容。


第七步,完成安装。

查看 JDK 版本
File → Project Structure:

SDK:Software Develop Kit,软件开发工具。其实更应该叫做 JDK,JDK 其实就是 Java Software Develop Kit。



项目结构与管理
项目结构
项目结构:项目 project → 模块 module → 包 package → 类 class
一个 IDEA 窗口对应一个 project。project 叫做工程,也可翻译为项目。
一个 project 中可以创建多个 module。
一个 module 中可以创建多个 package。
一个 package 中可以创建多个 class。
这些结构的划分,是为了方便管理功能代码。
在 IDEA 中,project 是最顶级的结构单元,然后就是 module。目前,主流的大型项目结构基本都是多 module 的结构,这类项目一般是按功能划分的,比如:user-core-module、user-facade-module 和 userhessian-module 等等,多个 module 之间可以相互依赖,有着不可分割的业务关系,也可以不依赖。因此,对于一个 project 来说:
- 当为单 module 项目的时候,这个单独的 module 实际上就是一个 project。
- 当为多 module 项目的时候,多个模块处于同一个 project 之中,此时彼此之间具有互相依赖的关联关系。
- 当然多个模块没有建立依赖关系的话,也可以作为单独一个 “小项目” 运行。
不同的包存放表达不同功能的代码,表达相同功能的代码放在同一个包里面。比如第一个包放所有和文字相关的代码,第二个包存放所有和图片相关的代码,第三个包存放所有和动画相关的代码。
选中工程,右键,可以新建模块;
模块下面有一个 src 文件夹,选中这个 src 文件夹,右键,新建包;
选中包,右键,可以新建类。
包名一般都是公司域名的倒序再加上包名。
IDEA 将工程也视为一个模块,因此工程下面也有一个属于这个工程的 src,也可以在这里继续新建模块、包以及类等,但是规范来说一般不这么做。


新建工程



也可以新建一个空的工程:

新建模块
选中工程,右键,可以新建模块。


新创建的模块:


还可以在这里新建模块:

新建包
在模块的 src 文件夹右键,选择新建 package。

包名一般都是公司域名的倒序再加上包名:

新建类
选中包,右键,新建类。


最终的工程、模块、包和类的层级关系:

在两个模块之间复制包
![[图片]](https://img-blog.csdnimg.cn/direct/7af1b4c16a3742b494a889f231701aed.png#pic_center)
这里最好不要动,直接点击 OK:
![[图片]](https://img-blog.csdnimg.cn/direct/9a60a59ff74c4df0a6fca3687d2b46fd.png#pic_center)
效果:
![[图片]](https://img-blog.csdnimg.cn/direct/5362c081a54d487c9920ca49bb57c84f.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/57186a5ca50c45f79cde4b86a14940c0.png#pic_center)
打开工程
![[图片]](https://img-blog.csdnimg.cn/direct/803c447941c345dd96c292acc62d21e8.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/6337fa9be76546cc81c7a54b3d0085f8.png#pic_center)
给模块重命名
![[图片]](https://img-blog.csdnimg.cn/direct/ac9869e49ce448bd9dcfdcd992200d53.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/d36d1d7bd1eb4778aae19383313cdde1.png#pic_center)
建议是两个都改变且保持一致。
给类重命名


删除模块



这意味着当前目录下的 ModuleTest02 是一个普通目录,不是一个模块。在磁盘目录下,这个路径没有发生任何变化。
![[图片]](https://img-blog.csdnimg.cn/direct/00d999142dcf4fb1a6a0ee007f8d5db3.png#pic_center)
此时可以真正地将这个路径从磁盘中删除:

这个操作会将这个文件夹从电脑的磁盘内删除,且不会放进回收站,操作时一定要小心谨慎。
导入模块
先找到需要被导入的模块在磁盘上的位置,选择整个模块的文件夹,ctrl + c 复制一下。


![[图片]](https://img-blog.csdnimg.cn/direct/88b02661aa934b0db70d1b236c816ede.png#pic_center)
找到要导入新模块的工程在磁盘中的位置:

![[图片]](https://img-blog.csdnimg.cn/direct/05b66d94eb2c420f947f153bd2376ef0.png#pic_center)
也就是先把要导入的模块的文件夹复制到要导入的工程的目录下。
![[图片]](https://img-blog.csdnimg.cn/direct/0976ddbc195f4b498c51b61f1d036908.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/2e54f0ab06904cfe8059908d34c9dad8.png#pic_center)
接下来将这个普通文件夹变成模块。
![[图片]](https://img-blog.csdnimg.cn/direct/ea4b30ee0a3b44a289e521ad6da0311f.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/6cb6a1f9365447db93966333d6775685.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/b87533600dad42b28df5064a554fae43.png#pic_center)
后面一直 next:
![[图片]](https://img-blog.csdnimg.cn/direct/13f13ba1b81945faaea6b86d1823e0a1.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/fba9c3d318d444f38f8f08d133327bcc.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/e8564ccf30714acaba17fc1433b6958b.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/d4dfe9270cb84a7387334e7607d64610.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/c4cc6d7aec6d47cca557ebd93e49085b.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/ac1c9e771c214723a27c7baa66ad0e72.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/9447adfe191a4f1b8d090c50cc776975.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/86fd7e1570204181a6826993091ced9b.png#pic_center)
总结起来就分两步:第一步把模块文件夹复制到要导入的工程路径下,第二步把这个复制过来的模块添加到工程中。
这是比较正统的做法,还有一种比较讨巧的做法,即在需要被导入模块的工程下,先新建一个和要被导入的模块相同类型的空的模块,比如要导入的是 Java 模块(或 Web 模块、Maven 模块),就在工程下新建一个 Java 模块(或 Web 模块、Maven 模块)。然后在原来的被导出的工程窗口下,选择要被导出的模块,ctrl + c 复制一下,接着切换到要被导入的工程窗口下,找到新建的这个模块下的 src,ctrl + v,进行粘贴。
![[图片]](https://img-blog.csdnimg.cn/direct/9ba2d55b086946aa95cb8d345010d017.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/f35fdc3d44704f2f80b56d0fcb4bde1b.png#pic_center)
点击上图的 src,ctrl + v 粘贴一下。
![[图片]](https://img-blog.csdnimg.cn/direct/8c7be532c72a4125b792b248df332247.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/7cd7432069524bd9b462665af0e7e0b5.png#pic_center)
将零散文件导入 IDEA
可以将用 VSCode、Nodepad++ 等写的零散文件导入 IDEA。
![[图片]](https://img-blog.csdnimg.cn/direct/74b1fcb2fed5474cbfa2cada5baa2c18.png#pic_center)
可以在文件夹内,全选这些文件,ctrl + c 复制。
![[图片]](https://img-blog.csdnimg.cn/direct/3313392fc659430e9498b67eae12dbb6.png#pic_center)
选中这个 src,ctrl + v 进行粘贴:
![[图片]](https://img-blog.csdnimg.cn/direct/2d9fd363caac4373a460c711775e4f9d.png#pic_center)
文件全都过来了,并且是可以运行的:
![[图片]](https://img-blog.csdnimg.cn/direct/06b86dc59340403e95517754a6e6f67b.png#pic_center)
设置
显示工具栏

打开设置


打开 IDEA 时默认启动项目

启动 IDEA 时,默认自动打开上次开发的项目?还是自己选择?
如果去掉 Reopen last project on startup 前面的对勾,每次启动 IDEA 就会出现如下界面:

取消自动更新

建议检查 IDE 更新的 √ 去掉,检查插件更新的 √ 选上。
修改 IDEA 主题

修改背景

选择一张合适的图片作为背景即可。

设置 IDEA 字体和字号

设置编辑器主题
![[图片]](https://img-blog.csdnimg.cn/direct/5bc591dbb9844004a70e3ada9c80deed.png#pic_center)
设置编辑器字体和字号
![[图片]](https://img-blog.csdnimg.cn/direct/0480f7e0dbfa4e02a8cedca401b2f25f.png#pic_center)
更详细的字体与颜色如下:
![[图片]](https://img-blog.csdnimg.cn/direct/ed10814e64224a78b779f6a310d543e8.png#pic_center)
如果选择某个 font 字体,中文乱码,可以在 fallback font(备选字体)中选择一个支持中文的字体。
修改注释
![[图片]](https://img-blog.csdnimg.cn/direct/7f52593646ef4e15a1f57bdba184b35f.png#pic_center)
Block comment:修改多行注释的字体颜色。
Doc Comment –> Text:修改文档注释的字体颜色。
Line comment:修改单行注释的字体颜色。
注释后面自动加空格
![[图片]](https://img-blog.csdnimg.cn/direct/4c9ad9873abd49748e13e2048ea25f9a.png#pic_center)
自动导包
![[图片]](https://img-blog.csdnimg.cn/direct/f783492f6bdb421b9242fe46624b22e6.png#pic_center)
动态导入明确的包:Add unambiguous imports on the fly,该设置具有全局性。
优化动态导入的包:Optimize imports on the fly,该设置只对当前项目有效。
设置项目文件编码
![[图片]](https://img-blog.csdnimg.cn/direct/7fa3fac36126495da3dcc20d09c40fdc.png#pic_center)
说明:Transparent native-to-ascii conversion 主要用于转换 ascii,显示原生内容。一般都要勾选。
可以给某一个路径下的文件设置单独的编码,而不采用全局编码:
![[图片]](https://img-blog.csdnimg.cn/direct/904683dcc2b84b96abaa90d8d4d50808.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/64e016864c4c41ec8ff866d87a6e9e63.png#pic_center)
设置控制台的字符编码
![[图片]](https://img-blog.csdnimg.cn/direct/b5ac9a244261495b80cf8104f885cee2.png#pic_center)
取消双击 shift 搜索
在 2022.1 版本中,采用如下方式消双击 shift 出现搜索框:搜索 double,勾选 Disable double modifier key shortcuts,禁用这个选项。
![[图片]](https://img-blog.csdnimg.cn/direct/19f6bd85932b48dd9b537b64ddcb4e8a.png#pic_center)
代码智能提示忽略大小写
IDEA 的代码提示和补充功能有一个特性:区分大小写。如果想不区分大小写的话,就把这个对勾去掉。建议去掉勾选。
![[图片]](https://img-blog.csdnimg.cn/direct/36fc5f658b924ebfad10e5f04eedafa2.png#pic_center)
修改类头的文档注释信息
![[图片]](https://img-blog.csdnimg.cn/direct/1ca2d0e432cb49bfa4d3f52c245083c3.png#pic_center)
常用的预设的变量,这里直接贴出官网给的:
${PACKAGE_NAME} - the name of the target package where the new class or interface will be created.
${PROJECT_NAME} - the name of the current project.
${FILE_NAME} - the name of the PHP file that will be created.
${NAME} - the name of the new file which you specify in the New File dialog box during the file creation.
${USER} - the login name of the current user.
${DATE} - the current system date.
${TIME} - the current system time.
${YEAR} - the current year.
${MONTH} - the current month.
${DAY} - the current day of the month.
${HOUR} - the current hour.
${MINUTE} - the current minute.
${PRODUCT_NAME} - the name of the IDE in which the file will be created.
${MONTH_NAME_SHORT} - the first 3 letters of the month name. Example: Jan, Feb, etc.
${MONTH_NAME_FULL} - full name of a month. Example: January, February, et
设置 import 显示 “*” 时的个数
![[图片]](https://img-blog.csdnimg.cn/direct/b79205c7eb7f4a35a5e34c6ffd31fc24.png#pic_center)
设置自动编译
![[图片]](https://img-blog.csdnimg.cn/direct/2667ae0a68fc4206a63e20befef8ba2f.png#pic_center)
省电模式
IDEA 有一种叫做省电模式的状态,开启这种模式之后 IDEA 会关掉代码检查和代码提示等功能。所以一般也可认为这是一种阅读模式,如果在开发过程中遇到突然代码文件不能进行检查和提示,可以看看是不是开启了该功能。
![[图片]](https://img-blog.csdnimg.cn/direct/07061ba745ef481cadc3c310fc032469.png#pic_center)
在多行显式编辑器选项卡
![[图片]](https://img-blog.csdnimg.cn/direct/ccec9e2fa68743148a03c21158f32d79.png#pic_center#pic_center)
显示行号与方法分隔符
![[图片]](https://img-blog.csdnimg.cn/direct/d42cc98e7d8d46cc9e3baffbf9e6f123.png#pic_center)
快捷键
快捷键汇总
格式化:ctrl + alt + l(小写的 l)
快速新增下一行:shift + enter
快速新增上一行:ctrl + alt + enter
删除一整行:ctrl + y
复制一整行:光标放在这行的任意位置,ctrl + c(会连带着最后的换行符一起复制,粘贴到别的位置时会连带着粘贴这个换行符)
撤销:ctrl + z
反撤销:ctrl + shift + z
剪切某一行:光标放在这行的任意位置,ctrl + x(会连带着最后的换行符一起剪切,粘贴到别的位置时会连带着粘贴这个换行符)
智能提示:alt + enter,当代码提示红色波浪线时表示出错,将光标放到红色波浪线处,点击此快捷键,则提示可以进行的操作有哪些。在没有报错的地方也可以用这个快捷键,也会提示可以进行的操作。
提示代码模板:ctrl + j,当想要调用模板但是又忘了要用哪个命令来调用时,可以用这个快捷键。
使用 xxx 块进行包围:ctrl + alt + t,当想要将某部分已经写完的代码用一个结构包围起来,形成某一种结构,比如将已经写好的部分代码作为 while 循环的循环体,可以全选这部分代码,按下此快捷键,根据提示进行选择即可。
调出生成 getter/setter/构造器等结构:alt + insert
自动生成返回值变量:ctrl + alt + v,即自动补全表达式的等号左侧。
复制当前行到下一行:ctrl + d
快速上下移动某一行:ctrl + shift + 箭头上下,只能在可以移动的范围内进行移动,否则按下快捷键后没有反应。或者 alt + shift + 箭头上下,这样的话可以移动的范围更广,即便是移动之后不符合语法,也会允许移动,而没有了移动范围的限制。
方法的形参列表提醒:ctrl + p
批量修改指定的变量名、方法名、类名等:shift + f6
抽取代码重构方法:ctrl + alt+ m
重写父类的方法:ctrl + o
实现接口的方法:ctrl + i
选中的结构的大小写的切换:ctrl + shift + u
批量导包:ctrl + alt + o
如何查看源码:ctrl + 选中指定的结构(适用于已经在代码中打出来的内容) 或 ctrl + n
![[图片]](https://img-blog.csdnimg.cn/direct/2ea0742a7f41473e8edb6bdf04427da6.png#pic_center)
显示当前类结构,支持搜索指定的方法、属性等:ctrl + f12
![[图片]](https://img-blog.csdnimg.cn/direct/53c541ec64d74afdab79018aa9deecd8.png#pic_center)
退回到前一个编辑的页面:ctrl + alt + ←
进入到下一个编辑的页面:ctrl + alt + →
上面四个快捷键多用于源码查看。
打开的类文件之间切换:alt + ←/→
![[图片]](https://img-blog.csdnimg.cn/direct/76abbb3fc77e44e388e497f47f9ade13.png#pic_center)
光标选中指定的类,查看继承树结构:ctrl + h
查看方法文档:ctrl + q
类的 UML 关系图:ctrl + alt + u
定位某行:ctrl + g
回溯变量或方法的来源:ctrl + alt + b
折叠方法实现:ctrl + shift + -
展开方法实现:ctrl + shift + +
查找指定的结构:ctlr+f
快速查找:选中的 Word 快速定位到下一个:ctrl + l
查找与替换:ctrl + r
直接定位到当前行的首位:home
直接定位到当前行的末位:end
查询当前元素在当前文件中的引用:ctrl + f7,然后按 ctrl + l 可以快速选择下一个。
全项目搜索文本:ctrl + shift + f
关闭当前窗口:ctrl + f4
![[图片]](https://img-blog.csdnimg.cn/direct/cab4bdf0eb4e448bacc30bf3517422e8.png#pic_center)
使用单行注释:ctrl + /
使用/取消多行注释:ctrl + shift + /
选中数行,整体往后移动:tab
选中数行,整体往前移动:shift + tab
查看快捷键
已知快捷键操作名,未知快捷键:
![[图片]](https://img-blog.csdnimg.cn/direct/818b91cbc854499488e9e1e7f4ea1e10.png#pic_center)
已知快捷键,不知道对应的操作名:

自定义快捷键
![[图片]](https://img-blog.csdnimg.cn/direct/fcff44a4ef9a45c7a1ec6f9a872683dd.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/df6c987f90204845894397de09532f6b.png#pic_center)
使用其它平台快捷键
录制宏
创建 Java Web 工程
创建 Maven Java 工程
创建 Maven Web 工程
关联数据库
插件
安装插件

常用插件

插件安装位置:

可以将自己从别的地方得到的插件,拷贝到这个目录下,然后用安装本地插件的方式安装插件。
有道需要账户,但是设置了之后仍不可用,翻译引擎可以用微软的:

代码模板
两类模板
IDEA 中有两处可以设置模板:
第一处(后缀补全):

第二处(实时补全):

对于实时补全的后缀补全,不用做过多区分,只要会调用即可。
常用代码模板:
- 非空判断
- 变量.null:if(变量 == null)
- 变量.nn:if(变量 != null)
- 变量.notnull:if(变量 != null)
- ifn:if(xx == null)
- inn:if(xx != null)
- 遍历数组和集合
- 数组或集合变量.fori:for 循环
- 数组或集合变量.for:增强 for 循环
- 数组或集合变量.forr:反向 for 循环
- 数组或集合变量.iter:增强 for 循环遍历数组或集合
- 输出语句
- sout:相当于 System.out.println
- soutm:打印当前方法的名称
- soutp:打印当前方法的形参及形参对应的实参值
- soutv:打印方法中声明的最近的变量的值
- 变量.sout:打印当前变量值
- 变量.soutv:打印当前变量名及变量值
- 对象操作
- 创建对象
- Xxx.new:创建 Xxx 类的对象,然后继续 .var 则赋给相应的变量,或者 ctrl + alt + v 自动补全等号左侧。
- Xxx.new.field:会将方法内刚创建的 Xxx 对象抽取为一个属性
- 强转
- 对象.cast:将对象进行强转,然后继续 .var 则赋给相应的变量
- 对象.castvar:将对象强转后,并赋给一个变量
- 创建对象
- 静态常量声明
- psf:public static final
- psfi:public static final int
- psfs:public static final String
- prsf:private static final
自定义代码模板
自定义后缀补全模板




自定义 Live Templates





添加成功:

单元测试模板:
@Test
public void test$var1$(){$var2$
}
![[图片]](https://img-blog.csdnimg.cn/direct/96bbb2eabe22497381f868e5c413ecba.png#pic_center)
创建多线程:
new Thread(){public void run(){$var$}
};
![[图片]](https://img-blog.csdnimg.cn/direct/a87fabb4730443cea92227cbfc647841.png#pic_center)
冒泡排序:
for(int $INDEX$ = 1; $INDEX$ <= $ARRAY$.length - 1; $INDEX$++) {for(int $INDEX2$ = 0; $INDEX2$ <= $ARRAY$.length - 1 - $INDEX$; $INDEX2$++) {if($ARRAY$[$INDEX2$] > $ARRAY$[$INDEX2$+1]){$ELEMENT_TYPE$ temp = $ARRAY$[$INDEX2$];$ARRAY$[$INDEX2$] = $ARRAY$[$INDEX2$+1];$ARRAY$[$INDEX2$+1] = temp;}}
}
![[图片]](https://img-blog.csdnimg.cn/direct/21741a5928b94cc4b61516470b07999a.png#pic_center)
Debug
添加断点
在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。
当代码执行到某一个断点时,是执行到这里但是尚未执行。
step over(F8):进入下一步,如果当前行断点是调用一个方法,则不进入当前方法体内。遇到一个方法时,直接执行完毕并跳到下一条语句,不会进入这个方法内。
![[图片]](https://img-blog.csdnimg.cn/direct/b8c6dd0966124322aee5a51548ae1b91.png#pic_center)
step over 对于自定义的方法或者 JDK 自带的方法都好使。
step into 和 force step into:
step into(F7):进入下一步,如果当前行断点是调用一个自定义方法,则进入该方法体内。
force step into(Alt +Shift + F7):进入下一步,如果当前行断点是调用一个核心类库方法,则进入该方法体内。
![[图片]](https://img-blog.csdnimg.cn/direct/092a3a16579f4f65820a303441d67a49.png#pic_center)
step into 只能进入自定义方法,force step into 既可以进入自己写的方法,也可以进入 JDK 自带的方法。
step out(Shift + F8):跳出当前方法体。
![[图片]](https://img-blog.csdnimg.cn/direct/674c13976f1a464686078926f440b311.png#pic_center)
step out 对于自定义的方法或者 JDK 自带的方法都好使。
![[图片]](https://img-blog.csdnimg.cn/direct/ec011350f81c4e51857a6e622dc5f231.png#pic_center)
Resume Program(F9):恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上。
![[图片]](https://img-blog.csdnimg.cn/direct/4c908671b208420585987ae265dc034c.png#pic_center)
Run to Cursor(Alt + F9):直接跳到光标处继续调试。
![[图片]](https://img-blog.csdnimg.cn/direct/038d2792c56e40868829293cc050656e.png#pic_center)
Stop(Ctrl + F2):结束调试。
![[图片]](https://img-blog.csdnimg.cn/direct/375fb61d00e546d481f61edb4f479eb4.png#pic_center)
View Breakpoints(Ctrl + Shift + F8):查看所有断点。
![[图片]](https://img-blog.csdnimg.cn/direct/3a03bd27061346a48e2d64fa115e5600.png#pic_center)
当前的断点:
![[图片]](https://img-blog.csdnimg.cn/direct/9173858d883d4b828fa41055d46de5a6.png#pic_center)
Show Execution Point:
![[图片]](https://img-blog.csdnimg.cn/direct/805a6beeef6a4883b30fa216758f7dcf.png#pic_center)
Mute Breakpoints:使得当前代码后面所有的断点失效, 一下执行到底。
![[图片]](https://img-blog.csdnimg.cn/direct/ec5d6e8f5a724e529811fefe6cff4f37.png#pic_center)
在 Debug 过程中,可以动态的下断点。
行断点
断点打在代码所在的行上。执行到此行时,会停下来。
方法断点
断点设置在方法的签名上,默认当进入时,断点可以被唤醒。
也可以设置在方法退出时,断点也被唤醒。
行断点是圆形,方法断点是菱形。
![[图片]](https://img-blog.csdnimg.cn/direct/cc9e48f852894f51b6ad5579cdc956b9.png#pic_center)
此时程序运行到调用这个方法时会进入这个方法且会停在这个方法的第一行,如果点击 Resume Program(F9),则程序立刻执行完这个方法并返回到调用方法中。
在菱形处右键:
![[图片]](https://img-blog.csdnimg.cn/direct/42704644d0674df88954adb414c67082.png#pic_center)
如果选择在方法退出时也停下来,即勾选 Method exit,那么在点击 Resume Program(F9)后,则程序立刻执行完这个方法并在该方法的最后一行停下来。
![[图片]](https://img-blog.csdnimg.cn/direct/43cb5d2ca8e94c51afdbefc5e4afb30c.png#pic_center)
字段断点
在类的属性声明上打断点,默认对属性的修改操作进行监控。代码中每一次对这个属性进行修改/访问时都会停下来。
图标是一个小眼睛的形状:
![[图片]](https://img-blog.csdnimg.cn/direct/682352511bd24b3e8df9951411467b93.png#pic_center)
语句 int id = 1; 也是一种修改,因为 id 默认值为 0,而此处显示更改为 1。
![[图片]](https://img-blog.csdnimg.cn/direct/4c768fb57d3b4289bb6bbb67f8baf2fe.png#pic_center)
条件断点
![[图片]](https://img-blog.csdnimg.cn/direct/9609758679c84797bebf0a87d618210d.png#pic_center)
加了条件之后的的行断点出现了一个问号:
![[图片]](https://img-blog.csdnimg.cn/direct/4d6198f07632488ba6774faf4bacab74.png#pic_center)
当条件满足时停在该行。
异常断点
对异常进行跟踪。如果程序出现指定的异常,程序就会执行断点,自动停住。
![[图片]](https://img-blog.csdnimg.cn/direct/b5b26cf28d964495930491104d16d98f.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/84472034390d44aca5e3da9abe70780a.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/4be0117f7de24959b5de4aef9a24e7d1.png#pic_center)
添加之后的效果(右边的选项都保持默认不变,直接点击 Done):
![[图片]](https://img-blog.csdnimg.cn/direct/2227ca9981ce4bce9453e34b160ef82f.png#pic_center)
此时对于程序,如果点击 run,会报错,如果点击 debug,会停在发生异常的位置:
![[图片]](https://img-blog.csdnimg.cn/direct/37da3edd5d0245d9af89ab0cc3459ff1.png#pic_center)
线程调试
自定义调试数据视图
![[图片]](https://img-blog.csdnimg.cn/direct/2b5f794028ba4e0985bfdeadcfe9fa2a.png#pic_center)
![[图片]](https://img-blog.csdnimg.cn/direct/683138df4ce449cd83c5e7c00efaa8bf.png#pic_center)
相关文章:
IDEA 2022
介绍 【尚硅谷IDEA安装idea实战教程(百万播放,新版来袭)】 jetbrains 中文官网 IDEA 官网 IDEA 从 IDEA 2022.1 版本开始支持 JDK 17,也就是说如果想要使用 JDK 17,那么就要下载 IDEA 2022.1 或之后的版本。 公司…...
Vue TypeScript 实战:掌握静态类型编程
title: Vue TypeScript 实战:掌握静态类型编程 date: 2024/6/10 updated: 2024/6/10 excerpt: 这篇文章介绍了如何在TypeScript环境下为Vue.js应用搭建项目结构,包括初始化配置、创建Vue组件、实现状态管理利用Vuex、配置路由以及性能优化的方法&#x…...
Hudi extraMetadata 研究总结
前言 研究总结 Hudi extraMetadata ,记录研究过程。主要目的是通过 extraMetadata 保存 source 表的 commitTime (checkpoint), 来实现增量读Hudi表写Hudi表时,保存增量读状态的事务性,实现类似于流任务中的 exactly-once 背景需求 有个需求:增量读Hudi表关联其他Hudi…...
Vue31-自定义指令:总结
一、自定义函数的陷阱 1-1、自定义函数名 自定义函数名,不能用驼峰式!!! 示例1: 示例2: 1-2、指令回调函数的this 【回顾】: 所有由vue管理的函数,里面的this直接就是vm实例对象。…...
Windows环境如何使用Flutter Version Manager (fvm)
Windows环境如何使用Flutter Version Manager (fvm) Flutter Version Manager (fvm) 是一个用于管理多个 Flutter SDK 版本的命令行工具,它允许开发者在不同项目之间轻松切换 Flutter 版本。这对于需要维护多个使用不同 Flutter 版本的项目的开发人员来说非常有用。…...
优化Elasticsearch搜索性能:查询调优与索引设计
在构建基于 Elasticsearch 的搜索解决方案时,性能优化是关键。本文将深入探讨如何通过查询调优和索引设计来优化 Elasticsearch 的搜索性能,从而提高用户体验和系统效率。 查询调优 优化查询是提高 Elasticsearch 性能的重要方法。以下是一些有效的查询…...
STM32-17-DAC
STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…...
一杯咖啡的艺术 | 如何利用数字孪生技术做出完美的意式浓缩咖啡?
若您对数据分析以及人工智能感兴趣,欢迎与我们一起站在全球视野关注人工智能的发展,与Forrester 、德勤、麦肯锡等全球知名企业共探AI如何加速制造进程, 共同参与6月20日由Altair主办的面向工程师的全球线上人工智能会议“AI for Engineers”…...
使用QT制作QQ登录界面
mywidget.cpp #include "mywidget.h"Mywidget::Mywidget(QWidget *parent): QWidget(parent) {/********制作一个QQ登录界面*********************/this->resize(535,415);//设置登录窗口大小this->setFixedSize(535,415);//固定窗口大小this->setWindowTi…...
代码随想录训练营第七天 344反转字符串 541反转字符串II 替换数字
第一题: 原题链接:344. 反转字符串 - 力扣(LeetCode) 思路: 双指针,一根指向字符串的头部,一根指向字符串的尾部。两个指针向中间移动,交换两根指针指向的值。 代码如下…...
【Python】数据处理:SQLite操作
使用 Python 与 SQLite 进行交互非常方便。SQLite 是一个轻量级的关系数据库,Python 标准库中包含一个名为 sqlite3 的模块,可以直接使用。 import sqlite3数据库连接和管理 连接到 SQLite 数据库。如果数据库文件不存在,则创建一个新数据库…...
NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -3
概要 CAN测试源码: https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理,总共30个基础CAN函数; 该文章只梳理常规CAN,增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…...
2024年第三届数据统计与分析竞赛(B题)数学建模完整思路+完整代码全解全析
你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 详细请查 作为经验丰富的数学建模团队,我们将为你带来2024年第三届数据统计与分析竞赛(B题)的全面解析。这个解决方案包不仅包括完整的代码实现,还有…...
高通Android 12 右边导航栏改成底部显示
最近同事说需要修改右边导航栏到底部,问怎么搞?然后看下源码尝试下。 1、Android 12修改代码路径 frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java a/frameworks/base/services/core/java/com/android/server/wm/Display…...
2.6数据报与虚电路
数据报 当作为通信子网用户的端系统要发送一个报文时,在端系统中实现的高层协议先把报文拆成若干个带有序号的数据单元,并在网络层加上地址等控制信息后形成数据报分组(即网络层PDU)中间结点存储分组一段很短的时间,找到最佳的路由后&#x…...
小主机折腾记26
双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来,将880G5twr上的rx480 4g安装到了x99大板上,预计是dg1输出,rx480做3d运算。安装完驱动后,还想着按照之前tesla p4的设置方法去设置rx480,结果果然,…...
ArrayList浅析
目录 一、ArrayList源码1.1 迭代器1.1.1 Itr源码浅析1.1.2 ListItr源码浅析 1.2 常用方法1.3 System.arraycopy1.4 ArrayList 的创建方式 二、引申问题2.1 ArrayList的大小是如何增加的?2.2 什么情况下你会使用ArrayList2.3 在索引中ArrayList的增加或者删除某个对象…...
Spring Boot整合hibernate-validator实现数据校验
文章目录 概念基本概念常用校验注解 前置内容整合Hibernate Validator快速入门优雅处理参数校验异常其余注解校验自定义校验注解 参考来源 概念 基本概念 Hibernate Validator 是一个参数校验框架,可以非常方便地帮助我们校验应用程序的入参,实现了参数…...
Ubuntu系统中网易云音乐编译安装
项目地址: netease-cloud-music-gtk: Linux 平台下基于 Rust GTK 开发的网易云音乐播放器 目录 1.README.md中按照步骤来 2.安装git 3.报错 sudo apt install cmake sudo apt-get install libdbus-1-dev sudo apt install dnf sudo dnf install gettext 继…...
MPLS标签号
标签被压入在2层与3层之间 称为 2.5层 标签的格式----32 位4 个字节 前 20 位为标签号,2~20 个标签号;其中1-15号保留,作为特殊编号; 第 21-23位 exp,3位8个数,为优先级,用于Q0S 策略使用&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
