IDEA的Debug (断点调试) 技巧

本文详细介绍了IDEA中的Debug功能,包括Debug的意义、基本操作如设置断点、步进、数据面板等,以及高级功能如断点回退、计算器表达式、条件断点等,有助于提升程序员的调试效率和代码理解能力。
部署运行你感兴趣的模型镜像

IDEA的Debug(断点调试)技巧

一、Debug简介和意义

1、Dubug简介

   Debug,又叫断点调试,就是对写好的程序进行逐步运行、分解、调试的过程,通过这个过程,我们可以跟踪程序的详细运行过程, 是程序员的开发神器,也是开发必会的一个重要技能。
   企业中程序开发和调试的比例为 1:1.5,可以说如果你不会调试程序,就没有办法从事编程工作,同时它也是决定我们进阶到更高层级的一个重要技能!总之,学会它的各种使用技巧,对于程序员而言,相当重要!

2、Debug意义

 帮助我们追踪代码的执行流程、更好的理解复杂程序的执行逻辑。
​ 帮助我们快速的进行程序的异常定位或者线上问题追踪。
​ 帮助我们更好的去学习已有框架的源代码,让我们更清晰的了解源码的执行细节和处理逻辑。

二、Debug模式

请添加图片描述

1、在需要进行调试的代码行前单击,打上红色断点。
2、要进行debug调试,必须以debug模式运行,可以如图中所示一样,右键debug运行,也可以右上角点击debug按钮运  行。我们现在很多开发人员在开发阶段都没有用debug模式启动的习惯,这个习惯最好早点形成,在断点调试的时候能为我们省去重启项目的麻烦。

三、Debug面板

请添加图片描述

debug面板其实大体可以分为两大类:
​ 第一类是调试功能区,分为:顶部调试功能区、侧栏调试功能区;
​ 另一类是数据展示面板区,又分为:栈帧面板区、变量数据面板区、线程数据面板区。

四、Debug基础功能

1、步过

请添加图片描述(F8) :步过(Step over),程序向下执行一行,如果当前行上有方法不会进入该方法,常用于调试过程中不想进入调用方法体的情况。

2、步入

在这里插入图片描述(F7) :步入(Step into),进入方法内,可以进入自定义方法或三方库方法,JDK官方类库无法进入。

3、强制步入

请添加图片描述 (Alt + Shift + F7) :强制步入( Force step into),能进入任何方法,一般 Step into 进不去时可以使用,可以帮助我们学习和查看JDK源码

4、步出

在这里插入图片描述(Shift + F8) :步出(Step out),退出方法,跟(force) step into 配合使用 , 从步入的方法内退出到方法调用处,此时方法已经执行完毕,只是还没有完成赋值。调试的时候,有时候会跳入到自己不想查看的方法体,

​ 这个时候也可以使用步出进行跳出。

5、运行至光标处

在这里插入图片描述(Alt + F9) :运行至光标处(Run to Cursor),可以让程序运行到光标处 ,无需额外设置断点。

6、运行至下个断点处

请添加图片描述 (F9) :运行至下个断点处(Resume Program) ,使运行到下一个断点的地方,如果后续没有断点将放行调试。

7、跳至当前调试处 - Show Execution Point

在这里插入图片描述(Alt + F10) :如果你的光标在其它行或其它页,它可以帮助你跳到当前断点执行的行。

五、断点位置

1、行断点

图标为:红色圆点。行断点是最常用的断点,作用为:在断点所在行进行暂停,可以进行逐行调试。
在这里插入图片描述

2、字段断点

图标:红色眼睛。作用为:在字段发生变更(默认)或者被访问(需要额外设置)时暂停。
在这里插入图片描述

1、如果想知道某个属性在什么时候被修改,可以直接在该字段上打上字段断点,这样字段被修改的时候就会自动暂停。
2、如果我们想在字段被访问时(包括get)也暂停,则可以右键字段断点,将【Field access】勾选上即可。

3、方法断点

​ 图标为:红色菱形。主要作用有如下两个:

​ 1)、在方法签名上打上断点,那么在方法入口(entry)和出口(exit)都会自动暂停。在方法入口暂停可以让我们从头调试整个方法,而在方法出口处暂停可以让我们看到方法执行完毕时,方法内各个变量的数据情况。
在这里插入图片描述

​ 2)、有时候我们的一个接口会存在很多实现类,我们短时间内难以分析究竟是运行到了哪个实现类中,这个时候就可以使用方法断点,这个时候将断点打在接口方法上,运行到该方法时,就会自动跳到实际执行的实现类中,而无需通过上下文环境去分析是哪个实现类,大大提高跟踪代码的速度。
在这里插入图片描述

​ 其他设置:可以通过自定义设置决定是否需要在入口和出口处停留在这里插入图片描述

4、异常断点

图标:红色闪电。作用:可以在抛出异常的地方进行自动暂停。需要注意的是异常断点无需在具体的代码上打断点的,而是在断点详情页中直接添加,后续在执行时,如果抛出我们监听的异常,则会自动暂停在抛出异常的地方。示例步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、Debug高级功能

1、断点回退

在这里插入图片描述又叫降帧,作用:回退到当前方法的调用处。

    当我们 Debug 从 A 方法进入 B 方法时,通过降帧可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。通常用于当我们快执行完 B 方法后,发现某个重要流程被我们跳过了,想再看一下,则此时可以先回退到 A 方法,然后再次进入 B 方法。
    由于方法的执行和结束在 JVM 中对应的是栈帧的入栈和出栈,而栈帧描述的就是方法对应的模型,所以降帧(退帧)对应的效果就是回退到上一个方法。

​ 注意: 断点回退可以在Frames面板上自由选择回退到哪个栈帧
在这里插入图片描述

2、计算器表达式

在这里插入图片描述Debug计算器,这是一个非常强大的debug功能,通过这个组件,几乎可以完成调试过程中大部分的事情

​ 包括:查看实时变量、实时变量赋值、执行各种程序操作(包括数据库操作)。

​ 1、查看实时变量:可以查看所有运行过的变量其内部数据状态。
在这里插入图片描述

​ 2、实时为变量赋值:可以对运行过的变量进行自定义赋值,且该赋值操作一旦执行, 对后续代码是可见的,

​ 一般用在前端传值失误,运行过程中希望修复变量为正确数据的场景。 在这里插入图片描述

​ 3、执行各种程序操作:可以执行所有符合java语法代码,包括执行操作数据库的代码。

注意:操作数据库为不可逆的,哪怕该断点调试结束,对数据库的操作也不会回滚,需要**谨慎对待!**​ 在这里插入图片描述

3、条件断点

​ 右键单击断点处,可以设置进入断点的条件表达式(返回值为true或false)只有当返回true时才会停在断点处,否则直接运行,一般用在希望满足某个条件然后才调试程序的场景。 如下图所示,为147行设置条件断点,只有当appLogDto的日志级别为ERROR才会进入断点调试:
在这里插入图片描述

4、强制返回

​ 对栈面板的目标栈帧右键点击【Force Return】,将会强制结束程序(不会往后执行程序),通常用在需要结束当前断点,而不希望接下来的程序操作数据库的情况,这里值得注意的是,如果选则用]结束断点,下面的代码依然会执行(依然会操作数据库)
在这里插入图片描述

5、主动抛异常

​ 通过这个功能可以自由的在代码中任意位置构造并且抛出异常,特别是我们希望远程环境抛出一个异常的场景,如果没有该功能,我们可能需要修改代码并且重新部署,测试完后还要修改回来再次部署。而 Throw Exception 则可以直接抛出一个异常,避免了这些繁琐的流程。示例步骤如下:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、stream流调试在这里插入图片描述

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

03-08
<think>好的,用户想了解DEBUG相关的概念和用法,特别是DEBUG在编程中的含义和使用方法。首先,我需要明确DEBUG的定义,它指的是在软件开发过程中识别和修复错误的过程。接下来,要解释DEBUG的常见方法,比如使用调试工具、断点设置、单步执行等。还要提到不同的调试手段,比如日志输出、断言和异常处理,并比较它们的区别,比如用户提到的引用中提到的Debug、断言和异常的区别,特别是Debug在发布阶段的性能问题。此外,需要涵盖DEBUG在不同环境下的应用,比如Unity中的Debug类,或者使用汇编级的调试工具如DOS中的Debug工具,如引用2提到的内容。最后,生成相关问题时要确保覆盖用户可能感兴趣的扩展方向,比如性能优化、实际应用场景或具体工具的使用方法。检查是否符合用户要求的格式,使用正确的中文表达,数学公式和代码块格式正确,引用标识自然添加。</think>### DEBUG在编程中的含义与使用方法 DEBUG指在软件开发过程中识别、定位和修复代码中的错误(即“bug”)的过程,是保证程序正确性的核心环节。其核心方法可分为以下三类: 1. **调试工具使用** - **IDE集成调试器**(如Visual Studio、PyCharm):支持断点设置、逐行执行、变量监控等功能。例如在Python中调试时,可通过`pdb`模块实现单步跟踪: ```python import pdb; pdb.set_trace() # 插入断点 ``` - **底层调试工具**:如引用[2]提到的DOS/Win环境下的Debug工具,可直接查看CPU寄存器状态(如`AX=0x1E2F`)和内存地址内容,适用于汇编级调试[^2]。 2. **代码级调试技术** - **断言(Assert)**:用于验证程序逻辑的正确性,当条件不满足时立即终止程序。例如在C#中: ```csharp Debug.Assert(list.Count > 0, "列表不能为空"); // 仅在DEBUG模式下生效 ``` - **日志输出**:通过日志记录程序状态,但需注意引用[1]指出的性能问题——频繁的Debug.Log在Unity发布版本中应通过条件编译移除[^1]。 3. **数学建模辅助调试** 复杂算法可通过数学验证提前发现问题。例如快速排序的时间复杂度分析: $$T(n) = 2T\left(\frac{n}{2}\right) + O(n) \implies T(n) = O(n \log n)$$ 若实测性能偏离该模型,则需检查分区逻辑或递归实现。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值