当前位置: 首页 > article >正文

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 中输入条件,如下所示

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 的顺序输出,可以通过设置断点执行顺序来实现,具体操作如下所示。

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下切换线程执行了。


http://www.kler.cn/a/552144.html

相关文章:

  • 数据结构--双向链表,双向循环链表
  • Redis7——基础篇(四)
  • 深度学习06 寻找与保存最优模型
  • Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)
  • WPS/WORD$OffterAI
  • Vue3项目,蛋糕商城系统
  • C++ Primer 访问控制与封装
  • Android Studio:如何使用 RxBus 类进行事件发布和订阅
  • Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析
  • 算法12-贪心算法
  • 前端基础——axios、fetch和xhr来封装请求
  • 用LangGraph轻松打造测试用例生成AI Agent
  • 【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库
  • 青少年网络安全竞赛python 青少年网络安全大赛
  • 【故障处理】- 11g迁19C数据泵报错: ORA-39083 ORA-06598 导致数据库大量对象导入不进去
  • Linux环境Docker使用代理推拉镜像
  • Postgresql的三种备份方式_postgresql备份
  • ARM中断流程思考。
  • 百度搜索融合 DeepSeek 满血版,开启智能搜索新篇
  • 微信小程序---计划时钟设计与实现