转载:挖掘IntelliJ IDEA的调试功能

7 篇文章 0 订阅
订阅专栏

 

本篇原文地址:http://qinghua.github.io/intellij-idea-debug/

本文介绍了 IntelliJ IDEA的一些相对不那么广为人知,但是又很实用的调试功能。希望能让你的IDE发挥出最大的功效!本文使用的IDEA版本是2018.1社区版,快捷键是Mac OS X。本文的兄弟篇是 挖掘IntelliJ IDEA的实用功能。

断点

断点类型

一般来说调试时,我们都是在代码行上鼠标一点,然后运行测试,遇断点所在的行即停,这就是所谓的行断点。IDEA支持以下几种断点类型:

  1. 行断点(Line Breakpoints):就是我们最经常用的方式。
  2. 方法断点(Method Breakpoints):如果你看到代码调用了一个接口,但不知道具体会跑在哪个实现上,便可以在接口上设置断点,这样不管哪个子类运行到这个方法都会停下来。
  3. 异常断点(Exception Breakpoints):可以在Run -> View Breakpoints中的Java Exception Breakpoints里添加异常的具体类型。这样的话,程序中一旦发生了这种异常马上就会停下来。
  4. 字段断点(Field Watchpoints):可以设置在字段上,这样读写字段都可以触发。需要注意的是,默认只有写才会停下,想要让读取时也停下,需要右击断点,在WatchField access上打勾才行。

条件断点

断点是可以设置条件的,这样便可以只在关心的时候停下来。比如说循环里处理一堆字符串,但是只关心特定的字符串,那条件断点便可以派上用场。按住Shift键设置断点,或是右击断点之后选择More来打开以下界面:

上图就是设置条件断点的界面,直接在Condition里输入条件即可,如"ggg".equals(name)。需要注意的是,Suspend默认是没有打勾的,必须勾选上才能让程序暂停。另外,辛辛苦苦设置的特定断点,是可以拖拽到别的地方去的,这样就省的到处敲来敲去的了。还有一个小技巧是按住Alt的同时设置断点,可以让断点仅停一次便自动消失。在设置临时断点时有点用。

无断点暂停

如果在很长的循环时不知道程序运行到哪里了,可以在调试时点击调试窗口上的Pause Program,这样程序便能在当前执行的地方暂停。另外,运行到光标(Run to cursor)也可以在没有设置断点的时候让程序运行到光标所在行时暂停。

调试技巧

下面介绍一些调试的小技巧。

智能进入(Smart step into)

当调试程序运行到类似这样的句子时,如果你想看的是actor.action方法,那么进入这个方法就相对麻烦一些。

1

actor.action(actionProvider.provide(action.getName()));

 

这时可以使用调试窗口上的智能进入,程序会弹出一个对话框,我们选择需要的调用处即可。算是一个提升调试效率的小技巧。

官方文档传送门: https://www.jetbrains.com/help/idea/debugging-code.html#d181035e286

表达式评估(Evaluate expression)

这应该是大部分人都知道的技巧了,可以通过表达式评估来重新赋值当前的变量,以便让程序运行到其它的分支去。当然也可以在Variables窗口中,右击想要改变的变量,选择Set Value。不过表达式评估里可以轻松增加新变量、动态import新类库等,功能更加强大。

官方文档传送门: https://www.jetbrains.com/help/idea/evaluating-expressions.html

远程调试(Remote debug)

如果运行的实例在其它机器(或者虚拟机、docker)上,只要实例设置了以下参数,就可以通过远程调试连接到8000端口进行调试。

1

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y

 

官方文档传送门: https://www.jetbrains.com/help/idea/debugging-code.html#d181035e408

对于IDEA来说,只需要在Run -> Edit Configuration里,增加一个Remote,设置主机Host和端口Port,然后调试它即可。

弃栈帧(Drop frame)

Visual Studio好的一点是调试时可以拖拽当前执行的位置,方便反复查看。虽然IDEA没有这样的功能,但是它可以使用弃栈帧来把当前调用栈的第一栈帧丢弃掉,相当于重新开始当前调试的方法。使用方法也算简单,在要丢弃的栈帧上右击,选择Drop Frame即可。或者直接单击调试窗口的Drop Frame按钮。不过需要注意的是,如果对象在子方法运行时发生了变化,是不会再变回去的。

官方文档传送门: https://www.jetbrains.com/help/idea/debugging-code.html#d181035e308

强制抛异常(Throw an exception):

这是IDEA 2018年加入的新功能,可以直接在调试中抛出指定的异常。使用方法跟上面的弃栈帧类似,右击栈帧并选择Throw Exception,然后输入如下代码即可:

1

throw new NullPointerException()

 

官方文档传送门: https://www.jetbrains.com/help/idea/altering-the-program-s-execution-flow.html#throw_exception

强制返回(Force return):

这是IDEA2015版时增加的功能,类似上面的手动抛异常,只不过是返回一个指定值罢了。使用方法跟上面也都类似,右击栈帧并选择Force Return,然后输入要返回的值即可。如果是void的方法那就更简单了,连返回值都不用输。

官方文档传送门: https://www.jetbrains.com/help/idea/altering-the-program-s-execution-flow.html

自动载入变化代码(Reload changes)

利用Java虚拟机提供的HotSwap功能,我们可以做到一边调试一边改代码。只要在修改完代码之后,点击Run -> Reload Changed Classes即可。不过HotSwap有一些限制,例如不支持static的字段和方法等。

官方文档传送门: https://www.jetbrains.com/help/idea/altering-the-program-s-execution-flow.html#reload_classes

显示方法返回值(Show method return values)

调试窗口里的Settings -> Show Method Return Values开关可以显示方法的返回值。例如以下方法:

1

2

3

private double random() {

return Math.random();

}

 

只要在return上设断点然后Step Over,或者在方法内部的任何地方设断点然后Step Out一下,便可以在调用处的变量窗口看到一个类似于这样的值:Test.random() = 0.28735657504865864。在这个方法调用没有赋值给变量时(如if (random() < 10))还挺有用的。

调试流(Trace Current Stream Chain)

前面说了Visual Studio的好,但是它调试时不能看lambda的值也真是挺恶心的,据说2015版以后开始支持有限的lambda了。IDEA在这方面就做的非常到位。Java 8带来的Stream里面到底是什么,有时候很难知道。通过IDEA提供的这个功能,我们可以很轻松地看到流在各个步骤之间的变化。如下图:

展平模式(Flat Mode)更是提供了全局的视角:

使用这个功能也非常简单,当程序在lambda表达式的任意处停下时,单击调试窗口的Trace Current Stream Chain按钮即可。

官方文档传送门: https://www.jetbrains.com/help/idea/analyze-java-stream-operations.html

调试内存泄漏(Memory View)

内存泄漏是一个比较头疼的问题,好在IDEA提供了内存分析工具,只要单击调试窗口右上角的Restore ‘Memory’ View就能看到内存窗口,然后点击其中的Click to load the classes list就能看到当前内存的对象分布情况。然后可以据此分析到底是哪个类的对象数量看起来有问题。

官方文档传送门: https://www.jetbrains.com/help/idea/analyze-objects-in-the-jvm-heap.html

调试lombok

如果只是想暂停一下set或get方法,可以使用字段断点,只不过可能会在调试中报错:Source code does not match the bytecode,但它能够工作。

如果想设断点的是toStringhashCode等方法,可以在注解上设置断点,也可以在调试时使用:Refactor -> Delombok并选择相对应的注解,然后再使用上文介绍的HotSwap功能,就可以生成代码并按需调试了。最后别忘记把代码恢复回来。

其它

调试异步、线程、死锁、活锁等高级功能,官网上面有详细的教程,可以在用到时参考。

官方文档传送门: https://www.jetbrains.com/help/idea/tutorial-java-debugging-deep-dive.html

快捷键

功能熟悉了以后,熟练使用快捷键能够大幅提高效率。以下是笔者调试时经常使用的快捷键:

  • F7:进入调用的方法
  • F8:单步运行
  • F9:继续运行
  • Shift+F7:智能进入调用的方法
  • Shift+F8:跳出当前方法
  • Alt+F8:表达式评估
  • Alt+F9:运行到光标
  • Ctrl+Shift+F9:调试当前光标所在方法或类
  • Ctrl+Shift+F10:运行当前光标所在方法或类
  • Shift+F9:调试上次运行的测试
  • Shift+F10:运行上次运行的测试
  • Command+Shift+T:切换测试和实现
Java开发者终极抉择:IntelliJ IDEA vs VS Code —— 4大维度深度对比评测
java专栏
05-16 5435
🔥关注墨瑾轩,带你探索Java的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手!🚀🔥技术宝库已备好,就等你来挖掘!🚀🔥订阅墨瑾轩,智趣学习不孤单!🚀🔥即刻启航,编程之旅更有趣!🚀在Java开发领域,选择合适的集成开发环境(IDE)对于提高开发效率和代码质量至关重要。和(简称VS Code)是两个广受好评的开发工具,各自拥有独特的特性和庞大的用户群。本篇将从多个维度深入探讨这两款IDE对Java开发者来说的优劣,包括但不限于性能、用户体验、生态系统、调试能力、以及特定Java功能的支持等方面。
Java开发者终极抉择:IntelliJ IDEA vs VS Code —— 5大维度深度对比评测
最新发布
java专栏
06-23 1149
🔥关注墨瑾轩,带你探索Java的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手!🚀🔥技术宝库已备好,就等你来挖掘!🚀🔥订阅墨瑾轩,智趣学习不孤单!🚀🔥即刻启航,编程之旅更有趣!🚀在Java开发领域,选择合适的集成开发环境(IDE)对于提高开发效率和代码质量至关重要。和(简称VS Code)是两个广受好评的开发工具,各自拥有独特的特性和庞大的用户群。本篇将从多个维度深入探讨这两款IDE对Java开发者来说的优劣,包括但不限于性能、用户体验、生态系统、调试能力、以及特定Java功能的支持等方面。
IDEA debug调试Evaluate
duanmy的博客
05-27 654
链接: IDEA debug 调试Evaluate Expression应用
IDEA debug 调试 —— Evaluate Expression窗口使用以及注意事项
ScutKevinYzy的博客
04-27 1326
昨天晚上调试代码的时候发现一个调试窗口—— Evaluate Expression 我们再用IDEA调试代码的时候,虽然很数值都可以显示出来,可有些东西还是看不到的,比如加载的mapper,xml,或者一些需要计算才有数值的东西。但我们可以通过 Evaluate Expression窗口进行查看。下面举个栗子: 一:我们在加载xml的文件的时候,在这里打断点: 二:右键—找到Evaluate Ex...
详述 IntelliJ IDEADebug
CG国斌的博客
01-16 1万+
如上图所示:从“Server”开始,往后图标依次为:Show Execution Point :显示执行端点(Alt + F10) Step Over :跳到下一步 (F8) Step Into :进入代码或者说进入到方法内部(F7) Force Step Into :强制进入代码或者说进入到方法内部(Alt + Shift + F7) Step Out :跳到下一个断点或者跳出方法(Shi
IDEA调试技巧
Fly_鹏程万里
04-20 1205
Debug技巧 在我们的编程生涯中,调试代码是免不了的,而如何调试代码就显得尤为重要了,其中利用 IDE 自带的调试工具,是我们快速定位问题的重要手段之一。在此,我们就一起来了解一下 IntelliJ IDEA 自带的调试工具,熟悉常用的Debug技巧。 标注 1:Show Execution Point ,显示执行端点(Alt + F10); 标注 2:Step Over,跳到下一步(...
IDEA Debug显示源码变量值无法显示?【已解决】
qq_41544627的博客
06-19 2100
IDEA 2018 jdk1.8
r4intellij:R编程语言到Intellij IDEA的集成
02-05
R语言对Intellij IDEA的支持 该项目将的R(一种用于统计计算和图形的语言)集成。 它旨在通过最好的IDE来联系用于数据挖掘和建模的最佳语言。 有关文档和安装说明,请参见我们的 该项目已达到某种程度的稳定,可用...
IntelliJ IDEA插件:Java内存对象实时搜索与分析
1. 集成开发环境(IDE)支持:该工具主要设计为与IntelliJ IDEA集成,利用IDEA强大的代码编辑和分析功能,增强开发者在Java应用运行时对内存对象的搜索和分析能力。 2. 运行时内存对象搜索:与普通的静态代码分析...
intellij idea本地开发调试hadoop的方法
热门推荐
oo笨小孩oo的专栏
04-26 2万+
我的intellij idea版本是14,hadoop版本2.6,使用《hadoop权威指南》的天气统计源码作为示例。 1、首先在hadoop官网上下载hadoop到本地(不需要进行环境变量的配置,仅仅只用下载hadoop的包即可)。 2、打开intellij idea创建一个空项目,并且将源码粘贴进去,如图 2、这时可以看见代码中的许多类是无法识别的,别急。接下来打开p
idea插件JVM内存工具JProfiler11
12-09
idea插件JVM内存工具JProfiler11,下载完,即可导入idea,可idea快捷打开使用
页面展示正常,后台 IDEA 窗口报错Exception evaluating SpringEL expression: “purchasingManagements.hasPrevious“”
GQ_666的博客
08-24 730
页面展示正常,后台 IDEA 窗口报错!! 1.有很多原因可以导致这种错误,我说一下我遇到的,我写的按id删除,本是很简单,但是一直后端报错。 最后发现删除后忘记写分页了,加上后就好了。 2.这是其他原因的解决方法 把美元符号,改成#号即可。 最后一句话,答案都在问题里,用心仔细找,基本上都是可以找到的! ...
新版IntelliJ IDEA Debug 缺少Drop Frame按钮
Daylight629博客
04-03 1477
新版IntelliJ IDEA Debug 缺少Drop Frame按钮 一、解决办法 二、解决办法
Ideadebug中F7与Drop Frame的那点事
小小的博客
09-14 1万+
ideadebug中,有很多调试的快捷键,比如F5进入到方法内、F6跳过方法往下执行、F8执行到下一个断点(如果没有下一个断点,则执行到结束)。本文主要介绍F7和Drop Frame使用,以及它们之间的区别。 1、F7 首先,我们写一段测试代码:1 public class Main { 2 public static void main(String[] args) { 3
idea debugdrop frame,set watch和设置过滤条件
weixin_34146986的博客
05-21 659
  idea debug中的drop frame就是回退到上一个方法调用的开始处,在IDEA里测试无法一行一行地回退或回到到上一个断点处,而是回到上一个方法。 在调用栈方法上选择要回退的方法,右键选择Drop Frame,回退到该方法的上一个方法调用处。 debug模式下,设置断点后,变量a原始值为11,watc变量或者在Watchs中点击绿色的加“+”号,...
IDEA集成性能分析神器VisualVM
工作与学习
08-05 4210
IDEA集成性能分析神器VisualVM
Java内存泄露监控工具:JVM监控工具介绍
swandy45的专栏
09-20 1274
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到 当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung
IDEA Debug过程中如何回退操作?
程序猿DD
04-15 1万+
大家在Debug程序的时候,是否遇到过因为“下一步”按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有“回到上一步”这样的操作呢?在IDEA中就提供了一个帮助你回退代码的机会,但这个方法并不是万能的。好了,下面就来具体说说这个功能使用使用Reset Frame回退操作不知道你在Debug的时候,是否有注意过下图标出的按钮Reset Frame,这就是今天要介绍...
MacBook Pro IntelliJ IDEA 15过期破解
m0_37568814的博客
11-14 7161
打开IntelliJ IDEA显示已过期对话框(IntelliJ IDEA evaluation has expired)。 根据博客 https://www.iteblog.com/archives/1542.html 中的方法,同样适用于MacBook Pro,省略了较复杂的方法。 相对简单的方法详细步骤如下: 1. 打开IntelliJ IDEA,出现如下对话框,并按照以下步骤依次进行...
写文章

热门文章

  • Excel技巧:字符串拼接合集 75800
  • WIN10忘记账号密码,拥有PIN码或指纹解锁,如何修改密码? 28755
  • 使用navicat远程连接oracle数据库 23409
  • win10更新后,浏览器打开网页一直加载 甚至打不开,错误代码:ERR_TIMED_OUT 17051
  • Intellij IDEA 保存时自动格式化代码 15910

分类专栏

  • 前端学习 1篇
  • CSDN-C1认证 2篇
  • 提高工作效率 7篇
  • windows命令 4篇
  • Python 2篇
  • 数据库连接 7篇
  • GIT 2篇
  • 软件测试 4篇

最新评论

  • WIN10忘记账号密码,拥有PIN码或指纹解锁,如何修改密码?

    yu_liu0414: 第一个无敌,那我是不是也可以改别人打开的电脑的密码(doge)

  • PPT打开失败,无法读取PPT

    阑梦清川: 因该是只有两次确定,再关掉ppt,为啥你的写3次关掉

  • PPT打开失败,无法读取PPT

    阑梦清川: 我看啊了一个晚上,这个网络上面几乎没有人可以解决这个问题

  • PPT打开失败,无法读取PPT

    True To The Core: 可能不一样吧表情包

  • PPT打开失败,无法读取PPT

    阑梦清川: 这个没有用啊

大家在看

  • 解决docker超时 309
  • ARM学习(34) GDB 调试器详细了解
  • 段式虚拟存储器的具体实现示例
  • SWAT-MODFLOW地表水与地下水耦合技术——建议收藏! 707
  • AI人工智能改变我们的学习和生活

最新文章

  • 白盒测试方法
  • 软件测试-黑盒测试方法
  • HTTP协议发展史
2023年2篇
2022年4篇
2021年5篇
2020年10篇
2019年15篇
2018年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢着色雕塑清远玻璃钢楼盘景观雕塑直供中山玻璃钢香蕉雕塑厂家重庆市玻璃钢雕塑哪里好常见商场美陈报价玻璃钢雕塑火车绍兴玻璃钢马雕塑广州特色玻璃钢花盆天水人物玻璃钢雕塑价格松江区玻璃钢雕塑厂鹤山玻璃钢雕塑定制东莞时尚玻璃钢面包雕塑上海玻璃钢动物雕塑厂家供货玻璃钢雕塑怎么运输贵阳公园玻璃钢雕塑制作玻璃钢狼人雕塑定做重庆仿铜玻璃钢雕塑市场玻璃钢雕塑今日价格主题玻璃钢雕塑销售价格株洲东莞玻璃钢雕塑椭圆形玻璃钢花盆组合有机玻璃钢雕塑艺术专业的玻璃钢动物雕塑玻璃钢雕塑合格证天津天桥梁玻璃钢花盆玻璃钢雕塑垃圾桶手工艺品专业玻璃钢蓝精灵雕塑玻璃钢花盆和泥镁花盆哪个重玻璃钢农民雕塑小品玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化