IDEA 调试技巧

article/2025/10/15 1:54:08

简介

在工作中看到很多水平不错的程序员,在调试代码的时候,也还只是停留在单步 debug 的阶段。如果能掌握更多的代码调试技巧,那么将大大提升工作效率。下面就让我么一起来系统的学习下 IDEA 的调试技巧吧。

debug界面介绍

默认设置下,idea 用 debug 模式启动项目时,会自动进入弹出 debug 界面,下面是 debug 窗口的各个工作区的介绍:

1 调试按钮:总共有 8 个按钮,对应着相应的执行动作。鼠标悬停可以看到对应的快捷键,或者在菜单栏 run 里面也能看到对应的快捷键

2 服务按钮:可以在这里重启/关闭程序,设置断点等。

3 方法调用栈:显示该线程调试时所执行的所有方法,最早调用的方法显示在最底部。

4 Variables:显示当前方法体内,断点之前的所有变量(即已经执行过的语句的变量)。

5 Watches:查看变量,可在该窗口查看变量的值。

法详解&快捷键

下面对每组工作区的用法做一个详细介绍

调试按钮

从调试按钮说起,共 8 个按钮,从左到右依次讲解 

  • Show Execution Point(Alt + F10):如果光标停留在其他页面或者其他代码行,点击该按钮能跳转到当前执行代码的行。
  • Step Over(F8):步过,执行当前行代码,如果当前代码行有调用方法,不会进入方法体。执行完成光标跳转到下一行。
  • Step Into(F7):步入,如果当前行有自定义的方法,则跳入自定义方法内部,不会跳入第三方库的方法。
  • Force Step Into(Alt + Shift + F7):强制步入,与Step Into差不多,主要的区别就是该方法能进入到任何方法(包括第三方库的方法)内,查看底层源码的时候可以用该按钮。
  • Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已经执行完毕,只是还没完成赋值。
  • Drop Frame(默认无快捷键):回退断点,后面单独说明使用方法。
  • Run to Cursor(Alt + F9):运行到光标处,光标停在你需要查看的代码行,然后使用这个功能,代码会运行至光标行,无需打断点。
  • Evaluate Expression (Alt + F8):计算表达式,后面单独说明使用方法。

服务按钮

服务按钮共 6 个,从上到下依此讲解

  • Return ‘xxx’(Ctrl + F5):重启程序。
  • Resume Program (F9):恢复程序,点击按钮执行至下个断点处,如果下面已经没有断点了,则执行完整个流程。
  • Stop 'xxx'(Ctrl + F2):关闭程序。
  • View Breakpoints(Ctrl  + Shfit + F8):查看所有断点,后面单独说明。
  • Mute Breakpoints(默认无快捷键):点击该按钮,所有断点失效,颜色置为灰色,再次点击启用断点,颜色置为红色。

变量查看

在 debug 过程中,跟踪查看变量的值是非常有必要的,在 idea 中有几个地方能查看变量的值

  • 在代码窗口,执行过的代码后面会跟着显示该行代码所有变量的值

  • 鼠标悬浮在要查看的变量上方(或者直接按住 Alt,然后单击想要查看的变量),也能看到对应变量的值

点击 "+" 能看到变量的详细信息

  • Variables里可以查看所有变量的信息

  • Watches里面,点击 New Watches,输入感兴趣的信息,即可查看变量信息

 回车可看到变量的详细信息如下:

计算表达式

计算表达式的功能是非常强大的。当你需要查看某个表达式的值的时候,或者需要修改变量的值的时候就可以用计算表达式。

查看表达式的值

当我们需要查看某个表达式的结果时,可以选中某个表达式,然后再按 Alt + F8,弹出计算表达式窗口,再按回车或者点击下方的 Evaluate 按钮计算表达式的值

修改变量的值

计算表达式也可以修改计算表达式的值,这样我们不需要重新修改代码或者设置改参数重新请求就能很方便的测试程序的各种情况

智能步入

当一行代码有几个方法的时候,用之前的步入功能(F7)怎么知道步入的是哪个方法呢,这时候就需要智能步入了,按Shift + F7,会自动列出该断点行的所有方法,选中需要步入的方法,就能步入到该方法中

session.setAttribute(Const.CURRENT_USER,response.getData()) 这句代码包含了 getData() 和 setAttribute() 方法,按 Alt + F7 会显示两个方法,单击需要步入的方法即可

断点条件设置

假设我们的代码中遍历一个 size 为100的 List,在遍历到第88次抛异常了,这时候,我们要 debug,如果我们在循环内设置一个断点,然后一直按 F9,直到第88次循环为止那岂不是既 low 又费时。idea 的 debug 功能已经为我们考虑到了该场景,在断点上点击右键,在 Condition 后面的输入框设置断点的条件,只有在条件成立的时候,断点才生效

查看配置所有断点

点击 View Points,弹出 BreakPoints 窗口,能查看所有断点并设置断点

Java Line Breakpoints                           ——我们设置的断点

Java Exception BreakPoints                  ——异常断点

JavaScript Exception BreakPoints         ——js异常断点

Enable                                                    ——设置断点是否禁用

Condition                                                ——断点条件

Suppend                                                 ——断点类型

设置异常断点

当我们需要拦截程序异常的时候,可以在 Java Exception BreakPoints 添加一个异常断点,当程序抛指定异常的时候,自动定位到该异常行

如下面代码执行的时候会抛出一个 ArithmeticException 异常,这时候我们并没有设置断点

@Test
public void test() {//该代码会抛出 ArithmeticException 异常int a = 100 / 0;
}

打开View Points窗口,添加异常断点

执行程序,程序会在执行到 int a = 100/0;的位置进入进入断点。

多线程调试

话不多说,先看下面代码

 

这里我们在 main 方法中启动了 3 个线程,在 MyRunnable 的 run 方法中打了断点,这时候,当我们调试 main 的时候,程序进入断点。(我这里显示的是进入到线程 2 的断点,实际情况可能是线程 1 或 3 ),然后按 F8 执行下一步,这时候线程的方法体执行完毕,我们看到客户端打印了 3 条日志

15:05:31.400 [线程3] INFO com.huang.mmall.Main - 我是线程:线程3
15:05:31.400 [线程1] INFO com.huang.mmall.Main - 我是线程:线程1
15:05:31.400 [线程2] INFO com.huang.mmall.Main - 我是线程:线程2

奇怪了,我们明明只 debug 了一个线程,为什么三个线程都执行完了呢,这是由于 idea 在 debug 时的默认阻塞级别是 All,会阻塞其余线程,当我们的线程执行完毕才执行其他线程。当我们需要多线程调试的时候,只需修改断点的阻塞级别为 Thread 即可

 这时候重新执行 debug,会看到三个线程同时进入了 debug,这时候,我们可以随意切换线程,控制线程的执行顺序

这时候切换到线程 1,然后按两次 F8 是线程执行完毕,看到控制台输出"我是线程:线程1",并不会像上面一样其他线程的日志也输出,只有在执行到该线程的代码的时候才输出。

回退断点

断点回退其实就是回退到该代码所在方法的调用处,idea debug 模式无法一步步回退到上一句代码或者上个断点,只能回退到上个方法。需要注意的是断点回退只能重新走下流程,变量/数据的状态已经改变了是无法回退的。例如数据库插入等操作

 

也可以在方法调用栈中,选择要回退的方法,然后右键 Drop Frame

中断debug

以前当我不想继续执行剩下的流程的时候(可能涉及到数据库的插入操作),我都是直接停止程序,然后重新启动。当其实可以有更巧妙的方法,可以利用 Force Return 强制返回结果,不执行剩下的代码。

在方法栈中选中想要中断的方法,然后右键,选择 Force Return

这里会弹出一个弹窗让你填写返回值,我直接返回 null

参考资料:https://www.cnblogs.com/chiangchou/p/idea-debug.html

 

扫码关注我,一起学习,一起进步


http://chatgpt.dhexx.cn/article/dYw9awjh.shtml

相关文章

# Idea 调试 Debug 技巧

Idea 调试 Debug 技巧 IDEA 为我们提供了很多简单且非常强大的调试功能 在需要调试的行打上断点,debugger 方式启动Idea 控制台如下 调试功能说明 Show Execution Point 快捷键:Alt F10回到当前激活的断点处:当你的鼠标不在断点所处的…

idea 调试

1、这里以一个web工程为例,点击图中按钮开始运行web工程。 2、设置断点 3、使用postman发送http请求 4、请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5、按F8 在 Debug 模式下,进入下一步,如果当前行断点是一个…

debug idea js,IDEA调试javaScript

谈起JavaScript调试,大家可能想到的就是FireFox下的FireBug,这毫无疑问,FireBug基本已经成为JavaScript开发人员的必备工具。在本文中,将向大家介绍如何在IDEA下远程调试JavaScript,毕竟能在IDE工具中直接设置断点&…

IDEA调试

IDEA调试 1 调试界面各按钮的含义2 调试过程中修改变量的值3 快速定位bug4 实战 IDEA是Java常用的开发工具,这里记录一下IDEA调试相关操作。 1 调试界面各按钮的含义 2 调试过程中修改变量的值 3 快速定位bug 4 实战 可以通过下面的代码实际操作操作,以…

IDEA如何进行debug调试

🌴IDEA如何进行debug调试 🍃第一步,设断点,打开debug🍃第二步,使用Debug调试的功能键 程序调试,相信是所有程序员必经之路,因为程序写出来是不可能没有错误的,当然除了非…

IDEA调试技巧(图文详解,保姆教程)

文章目录 基础篇:一、行断点二、详细断点(源断点)三、方法断点四、异常断点五、字段断点 进阶篇一、条件表达式二、通过调试来打印堆栈信息三、可以通过调试来解析表达式四、避免操作资源drop frames五、常用按键功能介绍六、调试源码七、str…

Intellij IDEA 调试功

本文简单介绍 IDEA 编辑器的调试功能,主要包括断点调试、单点调试、高级调试。可以收藏本文章,使用到的时候方便查找。 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试。 IDE下方出现 Deb…

在Intellij IDEA中使用Debug

Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。 所以学习下如何在Intellij IDE…

IDEA的debug调试技巧详解

目录 一、概述 二、debug操作分析 1、打断点 2、运行debug模式 3、重新执行debug 4、让程序执行到下一次断点后暂停 5、让断点处的代码再加一行代码 6、停止debug程序 7、显示所有断点 8、添加断点运行的条件 9、屏蔽所有断点 10、把光标移到当前程序运行位置 11、…

app分享到微信的方案

来源分析 商业分析在微信的使用人数已经高居各通讯APP的榜首的同时,微信成为了我国移动流量最大的平台之一。在次趋势的引导下,很多的商家、体户便抓住了这一机遇,利用微信这个渠道来做产品的推广、以及营销方案宣传。但是好景不长&#xff…

java版微信分享功能(支持分享给好友/分享到朋友圈)

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 先上官方文档:http://mp.weixin.qq.com/wiki/home/index.html 做之前建议先过遍文档,文档都说的清晰明了。 如果已经看过文档,那我们一起整理下JSSDK的流程步骤: 绑定域名 …

Android中实现微信分享的功能

在android开发中微信分享功能还是经常用到的,比如把文字,图片,网页类型,小程序类型的文件等分享给微信好友,朋友圈等。官方文档 那么接下来就来说说如何去实现吧 一.添加依赖 implementation com.tencent.mm.opensdk:…

H5链接分享到微信

在开发中最长遇到的一个需求就是微信分享&#xff0c;那么怎么实现呢&#xff0c;我使用uni-app写的 首先需要一个引导分享的图片 <view v-show"yd" class"boxContent" click"getclose(text)"><image class"yd" src"/s…

微信小程序学习 onShareAppMessage转发分享

最近在做仿抽奖助手小程序&#xff0c;遇上分享的一个问题。抽奖助手分享出来的商品缩略图很清晰且格式更好&#xff0c;而我们分享出来的是页面的默认截图&#xff0c;感觉不好看。其实它这个地方用的是图片&#xff0c;增加一个imageUrl即可。 onShareAppMessage(options) 在…

H5微信分享、自定义微信分享

在一个h5页面添加微信&#xff0c;分享给微信好友、朋友圈、腾讯微博 下面来实现 。 需要&#xff1a; 1、需要一个企业版的微信公众号&#xff08;认证过的&#xff09; 2、一台服务器 企业版的微信公众号原因&#xff1a; 在微信公众平台的接口权限内可以看到&#xff…

使用shareSDK实现微信多图分享到朋友圈Url分享到朋友圈URL分享到好友 问题记录

问题概述 其实第三方分享很早就有了&#xff0c;这个按理说这个应该没什么难度&#xff0c;为啥记录一下呢&#xff0c;因为项目中同时出现了 朋友圈多图分享&#xff08;多张URL集合&#xff09;&#xff0c;朋友圈URL分享&#xff0c;群和个人URL&#xff0c;图片分享。基本…

iOS ShareSDK实现分享——微信分享

最近领导让添加ios 微信分享视频的功能&#xff0c;之前做的只有微信分享本地图片的功能。 查看官网并没有找到答案&#xff0c;后来在其官网论坛中http://bbs.mob.com/thread-20938-1-1.html 这里面发现新版的sdk&#xff08;v3.2.1&#xff09;中才添加的微信分享本地文件&a…

微信分享功能

最近在做手机端页面&#xff0c;需要一个分享功能&#xff0c;其实自身分享是可以的&#xff0c;但是为了分享出的内容丰富&#xff0c;比如缩略图了&#xff0c;描述了等等&#xff0c;如下图所示&#xff1a; 步骤一&#xff1a;绑定域名 先登录微信公众平台进入“公众号…

Android app分享文件到微信

两种实现方案&#xff1a; 1.使用WXFileObject构造分享方法发送到微信&#xff1b; 2.调用系统分享方法&#xff0c;把文件直接发送到微信&#xff1b; 那么下面来分别看看怎么实现&#xff1a; 〇、准备工作 首先&#xff0c;需要在AndroidManifest.xml中配置FileProvider信…

ShareSDK关于微信分享问题

转自&#xff1a;http://www.eoeandroid.com/thread-310281-1-1.html 发现用sharesdk&#xff0c;做其他平台分享很快&#xff1b;如新浪微博、腾讯微博、有道云笔记、开心网、Google等等&#xff0c;几句代码就搞定&#xff1b; 但是微信有点麻烦&#xff0c;下面我把…