java断点调试(debug)

在开发中,新手程序员在查找错误时, 这时老程序员就会温馨提示,可以用断点调试,一步一步的看源码执行的过程,从而发现错误所在。
重要提示: 断点调试过程是运行状态,是以对象的运行类型来执行的

断点调试介绍

断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug断点调试是程序员必须掌握的技能。断点调试也能帮助我们查看java底层源代码的执行过程,提高程序员的Java水平。

基本概念

  • 断点(Breakpoint):在代码中设置的特定位置,当程序运行到该位置时,会暂停执行,以便开发者检查程序的状态。
  • 调试会话(Debug Session):启动调试模式后,程序在 IDEA 的控制下运行,开发者可以通过各种调试工具与程序交互,这个过程称为调试会话。
  • 调试工具窗口:IDEA 提供了专门的调试工具窗口,用于显示调试相关的信息,如变量的值、调用栈、线程信息等。

操作步骤

  1. 设置断点:在 IDEA 的代码编辑器中,单击要设置断点的代码行左侧的空白区域,会出现一个红点,表示断点已设置。也可以通过右键单击代码行,选择 "Toggle Breakpoint" 来设置或取消断点。
  1. 启动调试 :可以通过以下几种方式启动调试会话。
    • 点击 IDEA 工具栏中的 "Debug" 按钮,选择要调试的 Java 类或启动配置。
    • 使用快捷键,如在 Windows/Linux 系统中通常是 "Shift+F9",在 Mac 系统中是 "Control+Shift+F9"。
    • 在 "Run" 菜单中选择 "Debug",然后选择相应的启动配置。
  1. 调试工具窗口 :启动调试后,IDEA 会显示调试工具窗口,主要包括以下几个部分。
    • Variables(变量):显示当前作用域内的变量及其值。可以通过双击变量来修改其值,方便进行测试和调试。
    • Call Stack(调用栈):显示方法的调用顺序,从当前执行的方法开始,向上追溯到方法的调用源头。可以点击调用栈中的方法,查看该方法调用时的上下文信息。
    • Threads(线程):显示当前正在运行的线程信息,包括线程的名称、状态等。可以在多线程程序中,方便地切换到不同的线程进行调试。
  2. 调试操作
    • Step Over(单步跳过) :快捷键是 "F8"。程序会执行下一行代码,如果下一行代码是方法调用,会直接执行完该方法并返回,不会进入方法内部
    • Step Into(单步进入) :快捷键一般是 "F7"。如果下一行代码是方法调用,会进入方法内部,继续单步执行。
    • Force Step Into(强制单步进入) :可以强制进入任何方法,包括 Java 核心类库中的方法,而不仅仅是用户自定义的方法。
    • Step Out(单步跳出) :当进入一个方法内部后,使用 "Step Out"(快捷键通常是 "Shift+F8")可以执行完当前方法,并返回到调用该方法的位置。
    • Resume Program(恢复程序) :快捷键是 "F9"。程序会从当前断点继续执行,直到遇到下一个断点或程序结束。
    • Evaluate Expression(计算表达式) :在调试过程中,可以通过 "Evaluate Expression" 功能计算表达式的值。在 "Variables" 窗口或代码编辑器中右键单击,选择 "Evaluate Expression",输入要计算的表达式,IDEA 会显示计算结果。

实际开发断点技巧

  • 条件断点 :可以为断点设置条件,只有当条件满足时,程序才会在该断点处暂停。在断点上右键单击,在"Condition"的内容框中设置条件表达式。

例如,我们在这个for循环中断点,那么每次执行循环都会进入断点,我们可以通过设置断点条件来控制是否进入断点,比如只需要在 i = 10 的时候进入断点,则可以在断点处右键,在弹出的对话框的 Condition 中输入条件,如下所示

java 复制代码
for (int i = 0; i < 100; i++) {
   System.out.println(i);
}
  • 异常断点 :IDEA 允许设置异常断点,当程序抛出特定类型的异常时,会自动暂停在抛出异常的位置。在 "Debug" 窗口中,点击 "View Breakpoints" 按钮,选择 "Java Exception Breakpoints",可以添加要监控的异常类型。
  • 多线程调试 :在多线程程序中,可以通过 "Threads" 窗口方便地切换线程进行调试。还可以使用 "Suspend All" 和 "Suspend Thread" 按钮来暂停所有线程或单个线程,以便分析线程之间的交互和数据共享问题。

如果我们希望按照 线程1-1,线程2-1,线程1-2,线程2-2,线程1-3,线程2-3 的顺序输出,可以通过设置断点执行顺序来实现,具体操作如下所示。

java 复制代码
new Thread(()->{
   System.out.println("线程1-1");
   System.out.println("线程1-2");
   System.out.println("线程1-3");
}).start();

new Thread(()->{
   System.out.println("线程2-1");
   System.out.println("线程2-2");
   System.out.println("线程2-3");
}).start();

先在两个线程代码中打断点,然后在断点处右键,设置为 Thread,如下图所示

然后就可以在frame下切换线程执行了。

相关推荐
独孤求败Ace3 分钟前
第44天:Web开发-JavaEE应用&反射机制&类加载器&利用链&成员变量&构造方法&抽象方法
java·开发语言
FLZJ_KL3 分钟前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式
CL_IN11 分钟前
企业数据集成:实现高效调拨出库自动化
java·前端·自动化
计算机-秋大田16 分钟前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
matlabgoodboy17 分钟前
Matlab代编电气仿真电力电子电机控制自动化新能源微电网储能能量
开发语言·matlab·自动化
计算机毕设指导625 分钟前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
镰圈量化25 分钟前
当电脑上有几个python版本Vscode选择特定版本python
开发语言·vscode·python
华子w90892585926 分钟前
基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现
java·spring boot·后端
橘猫云计算机设计33 分钟前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
BUTCHER540 分钟前
Java 使用websocket
java