java断点调试(debug)

news2025/2/21 17:56:47

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

断点调试介绍

        断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个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.coloradmin.cn/o/2301127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新智能优化算法:牛优化( Ox Optimizer,OX)算法求解经典23个函数测试集,MATLAB代码

一、牛优化算法 牛优化&#xff08; OX Optimizer&#xff0c;OX&#xff09;算法由 AhmadK.AlHwaitat 与 andHussamN.Fakhouri于2024年提出&#xff0c;该算法的设计灵感来源于公牛的行为特性。公牛以其巨大的力量而闻名&#xff0c;能够承载沉重的负担并进行远距离运输。这种…

Redis7——基础篇(四)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09; 接上期内容&…

Git备忘录(三)

设置用户信息: git config --global user.name “itcast” git config --global user.email “ helloitcast.cn” 查看配置信息 git config --global user.name git config --global user.email $ git init $ git remote add origin gitgitee.com:XXX/avas.git $ git pull or…

MySQL 之INDEX 索引(Index Index of MySQL)

MySQL 之INDEX 索引 1.4 INDEX 索引 1.4.1 索引介绍 索引&#xff1a;是排序的快速查找的特殊数据结构&#xff0c;定义作为查找条件的字段上&#xff0c;又称为键 key&#xff0c;索引通过存储引擎实现。 优点 大大加快数据的检索速度; 创建唯一性索引&#xff0c;保证数…

Linux基础24-C语言之分支结构Ⅰ【入门级】

分支结构 问题抛出 我们在程序设计中往往会遇到如下问题&#xff0c;比如下面的函数计算&#xff1a; 也就是我们必须要通过一个条件的结果来选择下一步的操作&#xff0c;算法上属于一个分支结构&#xff0c;处于严重实现分支结构主要使用if语句。 条件判断 根据某个条件成…

LeetCode47

LeetCode47 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 给定一个可包含重复数字的整数数组 nums&#xff0c;按任意顺序返回所有不重复的全排列。 示例 示例 1 输入: nums [1, 1, 2]输出: [[1, 1, 2],[1, 2, 1],[2, 1, 1] ]…

【Unity动画】导入动画资源到项目中,Animator播放角色动画片段,角色会跟随着动画播放移动。

导入动画资源到项目中&#xff0c;Animator播放角色动画片段,角色会跟随着动画播放移动&#xff0c;但我只想要角色在原地播放动画。比如&#xff1a;播放一个角色Run动画&#xff0c;希望角色在原地奔跑&#xff0c;而不是产生了移动距离。 问题排查&#xff1a; 1.是否勾选…

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…

【数据结构】(9) 优先级队列(堆)

一、优先级队列 优先级队列不同于队列&#xff0c;队列是先进先出&#xff0c;优先级队列是优先级最高的先出。一般有两种操作&#xff1a;返回最高优先级对象&#xff0c;添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构&#xff0c;是一棵完全二叉树&#xff0c…

4、IP查找工具-Angry IP Scanner

在前序文章中&#xff0c;提到了多种IP查找方法&#xff0c;可能回存在不同场景需要使用不同的查找命令&#xff0c;有些不容易记忆&#xff0c;本文将介绍一个比较优秀的IP查找工具&#xff0c;可以应用在连接树莓派或查找IP的其他场景中。供大家参考。 Angry IP Scanner下载…

【Linux】命令操作、打jar包、项目部署

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;Xshell下载 1&#xff1a;镜像设置 二&#xff1a;阿里云设置镜像Ubuntu 三&#xf…

瑞萨RA-T系列芯片ADCGPT功能模块的配合使用

在马达或电源工程中&#xff0c;往往需要采集多路AD信号&#xff0c;且这些信号的优先级和采样时机不相同。本篇介绍在使用RA-T系列芯片建立马达或电源工程时&#xff0c;如何根据需求来设置主要功能模块ADC&GPT&#xff0c;包括采样通道打包和分组&#xff0c;GPT触发启动…

Unity Shader学习6:多盏平行光+点光源 ( 逐像素 ) 前向渲染 (Built-In)

0 、分析 在前向渲染中&#xff0c;对于逐像素光源来说&#xff0c;①ForwardBase中只计算一个平行光&#xff0c;其他的光都是在FowardAdd中计算的&#xff0c;所以为了能够渲染出其他的光照&#xff0c;需要在第二个Pass中再来一遍光照计算。 而有所区别的操作是&#xff0…

tailwindcss学习01

系列教程 01 入门 02 vue中接入 入门 # 注意使用cmd不要powershell npm init -y # 如果没有npx则安装 npm install -g npx npm install -D tailwindcss3.4.17 --registry http://registry.npm.taobao.org npx tailwindcss init修改tailwind.config.js /** type {import(tai…

DIN:引入注意力机制的深度学习推荐系统,

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 在电商与广告推荐场景中&#xff0c;用户兴趣的多样性和动态变化是核心挑战。传统推荐模型&#xff08;如Embedding &…

【前端】如何安装配置WebStorm软件?

文章目录 前言一、前端开发工具WebStorm和VS Code对比二、官网下载三、安装1、开始安装2、选择安装路径3、安装选项4、选择开始菜单文件夹5、安装成功 四、启动WebStorm五、登录授权六、开始使用 前言 WebStorm 是一款由 JetBrains 公司开发的专业集成开发环境&#xff08;IDE…

【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)

文章目录 1. 前言&#xff1a;为什么选择Go语言构建微服务架构1.1 微服务架构的兴趣与挑战1.2 为什么选择Go语言构建微服务架构 2. Go语言简介2.1 Go 语言的特点与应用2.2 Go 语言的生态系统 3. 微服务架构中的 gRPC 实践3.1 什么是 gRPC&#xff1f;3.2 gRPC 在 Go 语言中的实…

Spring核心思想之—AOP(面向切面编程)

目录 一 .AOP概述 二. Spring AOP 使用 2.1 引入AOP依赖 2.2 编写AOP程序 三. Spring AOP详情 3.1 切点(Pointcut) 3.2 连接点(Join Point&#xff09; 3.3通知&#xff08;Advice&#xff09; 3.4切面(Aspect) 3.5通知 3.6 PointCut &#xff08;公共切点&#xff09;…

关于使用雪花算法生成唯一ID,返回给前端ID不一致的问题

问题 在某个项目中,使用雪花算法生成的唯一ID,从数据库查询到数据后返回给前端,但是前端接受到的数据ID和数据库原先生成的不一致 但是前端展示的数据: 原因 原因是后端使用Long类型来存储雪花算法生成的ID,但是这个数值已经超过前端数值类型的范围,导致前端在存储这个数值…

axios post请求 接收sse[eventsource]数据的

axios 接收sse数据的 axios 接收sse数据的 EventSource什么 基于 HTTP 协议实现&#xff0c;通过与服务器建立一个持续连接&#xff0c;实现了服务器向客户端推送事件数据的功能。在客户端&#xff0c;EventSource 对象通过一个 URL 发起与服务器的连接。连接成功后&#xff0…