导读

  • 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点条件?那孩子懵了,想了好一会对我说没用过,甚至都没听说过这个。

  • 作为一名资深的老司机,IDEA调试可以说是家常便饭,如果不会debug,我都不信你读过源码,就别和我说原理了,直接pass掉。

基本界面

① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。

② 断点:在左边行号栏单击左键,或者快捷键Ctrl+F8 打上/取消断点,断点行的颜色可自己去设置。

③ Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口。如果没有自动激活,可以去设置里设置。

④ 调试按钮:一共有8个按钮,调试的主要功能就对应着这几个按钮,鼠标悬停在按钮上可以查看对应的快捷键。

⑤ 服务按钮:可以在这里关闭/启动服务,设置断点等。

⑥ 方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其它类库的方法了,否则这里会有一大堆的方法。

⑦ Variables:在变量区可以查看当前断点之前的当前方法内的变量。

⑧  Watches:查看变量,可以将Variables区中的变量拖到Watches中查看 。

变量查看

  • 在调试过程中往往需要观察变量的变化来判断业务逻辑,我们可以在以下的四个地方观察。

① 最常用的变量的观察区域variables

② IDEA中最人性化的地方之一,会将变量的值阴影显示在变量的后面。

③ watch区域,眼镜的形状,一般不会展开。如下图:

点击'+'号可以新增需要观察的变量,点击'-'号可以删除。

④ 鼠标悬停在变量上也会出现变量的值,点击展开即可查看。

计算表达式

  • 在调试业务逻辑的时候一般总会遇到某个条件或者某个变量的计算值的还不知道的情况下就需要判断下一行代码,那么此处就需要用到计算表达式的功能。计算表达式有两种方法,如下:

① 选择需要计算的代码,鼠标右键---->Evaluate Expression--->Evaluate即可计算。

② 直接点击计算器形状控件即可弹出计算的窗口,将代码复制进去即可,注意复制进去的代码一定要符合逻辑,比如局部变量一定要是已经声明的。

断点条件设置

  • 对于新手要看Spring源码的话,再遇到调试UserService的doGetBean的方法时可能要崩溃,因为doGetBean在容器启动的时候可能会被调用几十次,你把断点打在doGetBean方法体中能让你生不如死。

  • 设置断点条件有两种方式:

    • ①直接在断点上右键,添加condition条件即可。

    • ② view breakpoints(ctrl+shift+8)显示所有的断点,在condition中添加条件即可。

  • 异常断点:设置了异常断点后,比如空指针异常,在程序出现需要拦截的异常时会自动定位到指定的行。如下图:

① ctrl+shift+F8显示所有断点,点击+号添加Java Exception Breakpoints

② debug运行,一旦有代码出现该异常,会自动定位到指定代码。

线程切换

  • 通常我们在调试的时候,一个请求过来被拦截了,此时想要发起另外一个请求是无法重新发的,因为另外一个请求被阻塞了,只有当前线程执行完成之后才会走其他的线程。在IDEA中可以改变一下阻塞级别,有两种方法:

    • 断点上右键--->选择Thread---->Make Default,如下图:

    • 显示所有断点(crtl+shift+F8),选中某一个断点,选择Thread,Make Default即可。如下图:

  • 设置了阻塞级别,此时就可以在线程切换了,如下图:

强制抛异常

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

强制返回

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

大牛都在用的IDEA调试技巧的更多相关文章

  1. 你可能不知道的IDEA高级调试技巧

    一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可 ...

  2. idea 高级调试技巧

    两年前写过一篇关于idea的高级用法,今天再来一篇关于调试方面的技巧讲解: 一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右 ...

  3. iOS各种调试技巧豪华套餐

    转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...

  4. Visual Studio高级调试技巧

    1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...

  5. 【转】你所不知道的Android Studio调试技巧

    这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...

  6. 你所不知道的Android Studio调试技巧

    转载:http://www.jianshu.com/p/011eb88f4e0d Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug ...

  7. Visual Studio原生开发的20条调试技巧(下)

    我的上篇文章<Vistual Studio原生开发的10个调试技巧>引发了很多人的兴趣,所以我决定跟大家分享更多的调试技巧.接下来你又能看到一些对于原生应用程序的很有帮助的调试技巧(接着上 ...

  8. Visual Studio原生开发的10个调试技巧

    这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托 ...

  9. Visual Studio的调试技巧

    Visual Studio的调试技巧 [原文地址] Debugging Tips with Visual Studio 2010 [原文发表日期] 2010/8/19 10:48 AM 这是我写的关于 ...

随机推荐

  1. 在腾讯云服务器上安装JDK+Tomcat并启动tomcat

    由于Java web项目需要使用到tomcat所以决定在腾讯云服务器(centos7.X)上安装JDK和tomcat,来部署我们的项目. 准备工具: 云服务器:centos7.x+ 本地连接服务器:X ...

  2. 在JavaScript里的“对象字面量”是什么意思?

    字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量.字面量分为字符串字面量(string literal ).数组字面量(array literal)和对象字面量(ob ...

  3. pandas入门(一):pandas的安装和创建

    pandas 对于数据分析的人员来说都是必须熟悉的第三方库,pandas 在科学计算上有很大的优势,特别是对于数据分析人员来说,相当的重要.python中有了Numpy ,但是Numpy 还是比较数学 ...

  4. Uber刷单,刷出中国的人性劣根?

         美国叫车应用Uber国际化之路一直挺顺利的,融资也挺顺利的,他们现在很有钱,最新总融资金额达到100亿美元,创下美国非上市高科技公司的融资纪录.全新的商业模式,以及优质的客户体验,让Uber ...

  5. 用 20 行 python 代码实现人脸识别!

    点击上方"Python编程与实战",选择"置顶公众号" 第一时间获取 Python 技术干货! 阅读文本大概需要 11分钟. 今天给大家介绍一个世界上最简洁的人 ...

  6. 海洋深处的数据中心——微软Natick项目

    数据中心(data center)是云计算的支柱,云计算的蓬勃发展离不开数据中心在建造运营方面的不断创新.但云端数据中心的运行过程中会产生大量热量,冷却降温过程则意味着巨大的能源消耗,这意味着需要庞大 ...

  7. JQUERY的基本使用方法

    #准备工作 在官网下载JQUERY库 将库在你需要的网页上引用 123 <head><script src="jquery.js"></script& ...

  8. 《数据结构与算法》—— O(3N)=O(N) ?

    上帝的磨盘转动很慢,但是却磨得很细. --毛姆 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles ...

  9. 第二章 表与指针Pro SQL Server Internal (Dmitri Korotkev)

    聚集索引 聚集索引就是表中数据的物理顺序,它是按照聚集索引分类的.表只能定义一个聚集索引. 如果你要在一个有数据的堆表中创建一个聚集索引,如2-5所示,第一步要做的就是SQL服务器创建另一个根据聚集索 ...

  10. 在高德地图上用svg.js绘制简单图形

    这段时间做的一个项目,需要在地图上绘制简单的图形.在学习高德地图JS API的过程中,发现高德地图提供的点.线等API并不能满足我的需求,还好它开放了自定义图层CustomLayer,官方说自定义图层 ...