debug的基本使用

news2024/12/25 1:28:35

1.简介
  首先看下IDEA中Debug模式下的界面。

  如下是在IDEA中启动Debug模式,进入断点后的界面,我这里是Windows,可能和Mac的图标等会有些不一样。就简单说下图中标注的8个地方:

  ① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。

  ② 断点:在左边行号栏单击左键,或者快捷键Ctrl+F8 打上/取消断点,断点行的颜色可自己去设置。

  ③ Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口。如果没有自动激活,可以去设置里设置,如图1.2。

64156ba9ae3c4205a80fda7cf293ef87.png 

  ④ 调试按钮:一共有8个按钮,调试的主要功能就对应着这几个按钮,鼠标悬停在按钮上可以查看对应的快捷键。在菜单栏Run里可以找到同样的对应的功能,如图1.4。

72239dde32004a6f893465952d0a202d.png 

  ⑤ 服务按钮:可以在这里关闭/启动服务,设置断点等。

  ⑥ 方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其它类库的方法了,否则这里会有一大堆的方法。

  ⑦ Variables:在变量区可以查看当前断点之前的当前方法内的变量。

  ⑧ Watches:查看变量,可以将Variables区中的变量拖到Watches中查看 

  [图1.1]a03c96485a5540ea9c639932a44f7a38.png

   [图1.2]:在设置里勾选Show debug window on breakpoint,则请求进入到断点后自动激活Debug窗口  b59c50fb3fad43f98b2276a10ed75f0c.png

  [图1.3]:如果你的IDEA底部没有显示工具栏或状态栏,可以在View里打开,显示出工具栏会方便我们使用。可以自己去尝试下这四个选项。

34b827fc94ac4006a2df00dfe960f930.png 

  [图1.4]:在菜单栏Run里有调试对应的功能,同时可以查看对应的快捷键。

 342d0e4f27cb4560ad1e3f62763ed35b.png 

 

二、基本用法&快捷键
Debug调试的功能主要对应着图一中4和5两组按钮:

  1、首先说第一组按钮,共8个按钮,从左到右依次如下:

 [图2.1]

96fc2d1761124a06bd9bde4704d8b78d.png 

    > Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。

    > Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。

    > Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法,如第25行的put方法。

    > Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

    > Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

    > Drop Frame (默认无):回退断点,后面章节详细说明。

    > Run to Cursor (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

    > Evaluate Expression (Alt + F8):计算表达式,后面章节详细说明。

  2、第二组按钮,共7个按钮,从上到下依次如下:

  [图2.2]

26b3149b2dbb43a38fbab3c69d5af4e8.png

 

    > Rerun 'xxxx':重新运行程序,会关闭服务后重新启动程序。

    > Update 'tech' application (Ctrl + F5):更新程序,一般在你的代码有改动后可执行这个功能。而这个功能对应的操作则是在服务配置里,如图2.3。

    > Resume Program (F9):恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了。

    > Pause Program:暂停程序,启用Debug。目前没发现具体用法。

    > Stop 'xxx' (Ctrl + F2):连续按两下,关闭程序。有时候你会发现关闭服务再启动时,报端口被占用,这是因为没完全关闭服务的原因,你就需要查杀所有JVM进程了。

    > View Breakpoints (Ctrl + Shift + F8):查看所有断点,后面章节会涉及到。

    > Mute Breakpoints:哑的断点,选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled,如图2.4,则该行断点失效。

     [图2.3]:更新程序,On 'Update' actions,执行更新操作时所做的事情,一般选择'Update classes and resources',即更新类和资源文件。

       一般配合热部署插件会更好用,如JRebel,这样就不用每次更改代码后还要去重新启动服务。如何激活JRebel,在最后章节附上。

       下面的On frame deactivation,在IDEA窗口失去焦点时触发,即一般你从idea切换到浏览器的时候,idea会自动帮你做的事情,一般可以设置Do nothing,频繁切换会比较消耗资源的。

       

    [图2.4]

    

 

三、变量查看
在Debug过程中,跟踪查看变量的变化是非常必要的,这里就简单说下IDEA中可以查看变量的几个地方,相信大部分人都了解。

  1、如下,在IDEA中,参数所在行后面会显示当前变量的值。

 [图3.1]

6cfb3f59a1e24a9ba0fffb24d0fe65b6.png 

  2、光标悬停到参数上

,显示当前变量信息。点击打开详情如图3.3。一般会使用这种方式,快捷方便。

 [图3.2]

2b62c70b06fa493baee4aef832afb98f.png 

 [图3.3]

a036a700d3724054b82f2238aadec8a2.png

 

  3、在Variables里查看,这里显示当前方法里的所有变量。

  [图3.4]

b3675a80e4e34ca09b2115809fe998f6.png 

  4、在Watches里,点击New Watch,输入需要查看的变量。或者可以从Variables里拖到Watche里查看。

 [图3.5]

79b0251f07b043b0898bd5cc7fc72b1c.png 

  如果你发现你没有Watches,可能在下图所在的地方。

[图3.6]  

52422d35d8ed4badb724ea1853c4f0cd.png 

 [图3.7]

42be3f1bf24d449ab157c7ecc3fc3a3e.png 

四、计算表达式
  在前面提到的计算表达式如图4.1的按钮,Evaluate Expression (Alt + F8) 。可以使用这个操作在调试过程中计算某个表达式的值,而不用再去打印信息。

[图4.1]

f8a802abaa8f4e17bdc560e2bd2e6590.png 

  1、按Alt + F8或按钮,或者,你可以选中某个表达式再Alt + F8,弹出计算表达式的窗口,如下,回车或点击Evaluate计算表达式的值。

     这个表达式不仅可以是一般变量或参数,也可以是方法,当你的一行代码中调用了几个方法时,就可以通过这种方式查看查看某个方法的返回值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1639013.html

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

相关文章

Redis运维篇-快速面试笔记(速成版)

文章目录 1. Redis的持久化1.1 RDB(快照模式)1.2 AOF 模式 2. Redis主从模型(高可用)2.1 Redis的主从复制2.2 Redis拓扑结构 3. Redis集群模式(高并发)3.1 Redis的Slots3.2 集群模式的常用命令3.3 多主多从…

win下vscode的vim切换模式的中英文切换

问题描述 在vscode中安装vim插件后,如果insert模式下完成输入后,在中文输入方式下按esc会发生无效输入,需要手动切换到英文。 解决方法 下载完成vscode并在其中配置vim插件下载github—im-select.exe插件(注意很多博文中的gitcod…

Node.js -- express 框架

文章目录 1. express 使用2. 路由2.1 路由的使用2.2 获取请求报文参数2.3 获取路由参数2.4 路由参数练习 3. express 响应设置4. 中间件4.1 全局中间件4.2 路由中间件4.3 静态资源中间件 5. 获取请求体数据 body-parser6. 防盗链7. 路由模块化8. 模板引擎8.1 了解EJS8.2 列表渲…

InfluxDB安装使用介绍

1.介绍 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 2.对常见关系型数据库(MySQL)的基础概念对比 1…

Spring Cloud——Circuit Breaker上篇

Spring Cloud——Circuit Breaker上篇 一、分布式系统面临的问题1.服务雪崩2.禁止服务雪崩故障 二、Circuit Breaker三、resilience4j——服务熔断和降级1.理论知识2.常用配置3.案例实战(1)COUNT_BASED(计数的滑动窗口)&#xff0…

UE4_Niagara_两个模型之间的粒子幻化

学习笔记,仅供参考! 操作步骤: 1、新建niagara system,添加空的发射器,渲染改为网格体渲染器,网格体为1M_Cube. 2、创建粒子材质重载。 3、渲染网格体的材质设置: 4、在发射器属性面板&#x…

LeetCode 213 —— 打家劫舍 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题是 LeetCode 198—— 打家劫舍 的升级版,多了一个首尾相连的设定。 因为首尾相连,所以第一个房屋和最后一个房屋只能偷窃其中一个。 所以,第一种方案就是不偷窃最后一个房…

Web APIs 学习归纳6--- BOM浏览器对象

前面几节主要针对DOM进行了学习,现在开始新的内容的学习---DOM浏览器对象。 DOM是更注重页面(document)内容的设计,但是BOM不仅限于页面(document)的设计,而是更加全面包括页面的刷新&#xff0…

SpringBoot使用ResponseBodyAdvice和RequestBodyAdvice实现请求体解密、响应体加密

文章目录 一、写在前面二、实现细节1、定义加解密注解2、请求体解密逻辑3、响应体加密逻辑4、测试类5、测试结果 三、源码分析1、RequestResponseBodyMethodProcessor2、RequestBodyAdvice3、ResponseBodyAdvice 一、写在前面 项目中经常需要对接第三方平台,每次对…

redis ZRANGE 使用最详细文档

环境: redis_version:7.2.2 本文参考 redis 官方文档1 语法 ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]参数含义key是有序集合的键名start stop在不同语境下,可用值不一样BYSCORE | BYLEX按照分数查询 | 相…

Node.js -- mongoose

文章目录 1. 介绍2. mongoose 连接数据库3. 插入文件4. 字段类型5. 字段值验证6. 文档处理6.1 删除文档6.2 更新文档6.3 读取文档 7. 条件控制8. 个性化读取9. 代码模块化 1. 介绍 Mongoose是一个对象文档模型库,官网http://www.mongoosejs.net/ 方便使用代码操作mo…

2021-10-21 51单片机两位数码管显示0-99循环

缘由单片机两位数码管显示0-99循环-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk10,wk20; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,1…

数据库(MySQL) —— DDL语句

MySQL—— DDL语句 什么是MySQL的DDL语句查看所有的所有数据库查看当前使用的数据库库操作创建库使用数据库删除库 表操作创建表查询当前库中所有的表查询表结构查询指定表的建表语句删除表 表修改删除字段修改数据类型修改字段名和字段类型重命名表删除指定表并重新创建该表 我…

c3 笔记7 css基本语法

相关内容&#xff1a;字体、段落、词间距、文字效果&#xff08;对齐、上下标、阴影&#xff09;、背景图、背景渐变、…… 单位pt与px的差别pt是印刷使用的字号单位&#xff0c;不管屏幕分辨率是多少&#xff0c;打印到纸上看起来都是相同的&#xff0c;lot的长度是0.01384英寸…

Mybatis四种实例化对象方式

代码准备 创建mybatis-config.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration…

【golang学习之旅】深入理解字符串string数据类型

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 目录 系列文章使用示例string的底层数据结构关于字符串复制字符串是不可变的如何高效的进行字符串拼接&#xff1f; 使用示例 Go 语言中的字符串只是一个只读的字节…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划&#xff0c;涵盖&#xff1a; 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

typescript类型检查和原始类型

typescript类型检查和原始类型 类型检查 非严格类型是typescript默认的类型检查模式&#xff0c;在该模式下&#xff0c;类型检查的规则相对轻松&#xff0c;不会对undefined和null值做过多的限制&#xff0c;允许将undefined和null值赋给string类型的变量。进行JavaScript代…

【算法】高精度乘法

前言 最近在参加某个比赛的时候遇到了这个问题&#xff0c;用字符串表示时&#xff0c;长度能达到15&#xff0c;所以针对大数乘法写一篇文章。 高精度 * 低精度 在这种场景下&#xff0c;一般都是给定一个无法用int或long long 存储的数&#xff0c;再给定一个能用int或lon…

第74天:漏洞发现-Web框架中间件插件BurpSuite浏览器被动主动探针

目录 思维导图 前置知识 案例一&#xff1a;浏览器插件-辅助&资产&漏洞库-Hack-Tools&Fofa_view&Pentestkit 案例二&#xff1a; BurpSuite 插件-被动&特定扫描-Fiora&Fastjson&Shiro&Log4j 思维导图 前置知识 目标&#xff1a; 1. 用…