导读        

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

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

        基本界面        

IDEA的Debug运行模式如下图:

以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方法体中能让你生不如死。

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

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

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

2. 异常断点设置的方式

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

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

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

        线程切换        

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

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

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

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

        强制抛异常        

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

        强制返回        

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

至此文章IDEA的一些调试技巧就介绍完了,不是很全,还有很多强大的功能没有介绍,如果读者觉得陈某写的不错,有所收获的帮忙点个赞,分享一下,谢谢!!!

idea debug调试_大牛都会用的 IDEA 调试技巧!!!相关推荐

  1. 大牛都会用的 IDEA 调试技巧!!!

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

  2. 大牛都会用的IDEA调试技巧!!!

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

  3. visual studio asmx 调试_通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序...

    最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...

  4. java 调试_我最喜欢的Java调试技术

    java 调试 This article is about techniques which I have used to debug codeBases of various kinds, such ...

  5. python多进程调试_使用pyrasite进行python进程调试,改变运行中进程的代码

    后端开发中有时会遇到这种情况:进程运行中偶现,重启进程问题就消失:或者是,进程一定要运行一段时间才会出现问题:又或是,极难复现的问题出现了,然而已有的log不足以定位 对于这些情况,尽管大部分时候,我 ...

  6. 物理机_双机调试_资料

    1.http://www.cnblogs.com/Sonic2007/category/127341.html 1.1.Windbg内核调试之一_ Vista Boot Config设置 - Da V ...

  7. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序

    当在 IBM i 上使用 Java 时,您可以使用 Qshell Interpreter 或者 CL 命令提供的 Java tools,在 Qshell 环境和 IBM i 环境上进行与 Java 开 ...

  8. idea打断点启动项目后debug红点内没有√,导致无法调试

    开发项目过程中总免不了进行断点调试,有时候会遇到无法正常调试的情形. 本博客简单总结了下我目前遇到的断点无法正常调试的情景和对应的解决办法,如果后面有遇到新的场景会继续补充 1.项目是否以debug模 ...

  9. scala本地调试_如何编写自己的Java / Scala调试器

    scala本地调试 在本文中,我们将探讨Java / Scala调试器的编写和工作方式. 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的 ...

最新文章

  1. 运动目标检测__光流法
  2. 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读
  3. WPF界面UI设计开发心得
  4. iptables 基础
  5. Spring批处理CSV处理
  6. js层级选择框样式_【JavaWeb】85:jQuery的各种选择器
  7. 【牛客 - 188C】水图(bfs树的直径,思维)
  8. MySQL笔记-InnoDB物理及逻辑存储结构
  9. js 计时器无法清除是为什么
  10. 研发管理(2)---技术总监的三板斧
  11. IIS6.0下ASP的新增功能
  12. 大数据分析应具备哪些属性
  13. Linux系统编程 -- 进程控制 进程终止
  14. 【springssm加载applicationContext.xml文件的一个坑】
  15. 关于mysql数据库在输入password后,滴的一声直接退出界面的解决的方法(具体办法)...
  16. 用html编写古诗词欣赏,品析古诗词画面描写之技巧
  17. 使用Voxelmorph配准IXI:数据预处理之颅骨去除及仿射对齐
  18. 0.强化学习概述+policy based+value based
  19. 【手机跳板 多款软件测试】图文演示!
  20. 算法入门——数组,链表,选择排序

热门文章

  1. RecyclerView因版本问题无法加载
  2. hdu 5592 ZYB's Premutation (线段树+二分查找)
  3. PHP实现同服务器多个二级域名共享 SESSION
  4. SqlServer 0和空字符串''等价?-----类型的隐式转换问题
  5. 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
  6. html5图像不停旋转,html5 canvas多个图像旋转
  7. elasticsearch狂神说笔记_神级学习笔记!别再说不会Elasticsearch了,这位架构师都整理好了...
  8. 数组查找———二分(折半)查找法
  9. 用c语言编程矩阵乘法,c语言矩阵相乘
  10. java中的运算符_java中的运算符