如果你也会这样调试,那真是泰酷辣
一、引言
工欲善其事,必先利其器,学会如何利用 IDEA 高效 debug ,将会大大提升我们的工作效率。基本的断点调试方式就不讲解了,网上有很多优秀的文章,这里会主要举一些我们日常工作中重要但是容易被忽视的调试技巧。
二、正文
2.1 不暂停的 debug
通常情况下,我们断点的时候,会卡住当前线程。假设我们在主预发或者公用环境进行debug,就老感觉背后有人在骂我,谁又在debug,环境怎么又不通了!所以当我们想要愉快在公用环境debug的时候要:
查看变量值
不暂停直接观察相关变量值
强行改变变量值
是谁调用了我
可以直接观察到调用堆栈,类似 Arthas 的 trace
你进来了不
如果执行了断点所在位置,会在控制台打出一行日志:
2.2 快速执行表达式
我们通常在调试的时候,利用 Evaluate Expression...(option + F8),可以进行我们的表达式执行。
有一定开发经验的小伙伴肯定使用过这个功能,因为在工作中,这个调试技巧使用的频率还蛮高的,我们可以利用快捷键高效调试,例如下图:
快捷键:alt + d 唤起执行窗口 -> option + F9 定位光标处 -> option + command + f8 快速执行表达式
2.3 调试的时光倒流
有的时候,我们的小伙伴可能心太急,一路迅速 deubg,却忘记沿途的风景了,这个时候我们就需要利用到 drop frame,具体操作如下图所示:
2.4 仅调试循环中的一个条件
有的时候,我们只想调试 for 循环中的某个条件,假设我们这个循环有 100 次,其中只有第99次的循环是我们想要的,如果我们一直点点点,点到第99次,那真是有一点痛苦,我们可以这样:
2.5 谁给变量赋的值?
在我们的项目中,假设有个变量 a,我想知道这个流程中到底是谁给 a 赋过值,结果一反引,几百处引用,那么我该如何知道谁在方法中给 a 赋了值,我们只需要在 pojo 对象的 a 字段上打上断点即可,动图展示一下:
2.6 这个方法何去何从
在我们的项目中,有个接口 a,但是有无数的类实现了这个接口 a,我想调试到真正执行 a 方法的地方,我该怎么做?在无数实现类中 debug 吗?我们可以将断点打在这个接口 a 方法上(当然,这个将会使你的 debug 变慢)。
2.7 断点执行至光标处
我们当前断点停止在第 5 行,假设我们想断点调试第 12 行,一般来说,我们在 12 行断点,然后直接往下走即可:
但其实我们可以这样:
直接 Run to Cursor (强烈建议快捷键操作,更加丝滑 option + F9),就可以直接断点到我们的 12 行。
2.8 异常断点
全局异常断点,会自动断点到我们出现异常的地方,具体操作可见图:
作者:有清
本文为阿里云原创内容,未经允许不得转载。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
目标智能体社会,MetaGPT 携手 Jürgen Schmidhuber 团队
过去数月,MetaGPT [1] 的智能体(Agents)软件公司实例让人印象深刻,它迅速在 GitHub 获得了30k star,也获得了数十个全球专业媒体与大V报道。但智能体软件公司只是智能体社会(Agent Society)的一个缩影。智能体社会或许会有软件公司、电商公司、游戏公司,也会拥有大量的独立智能体提供生产力。现代人工智能之父 Jürgen Schmidhuber 也非常认可智能体社会的理念,他与其团队对MetaGPT做出了显著贡献,列入了 MetaGPT 作者名单。 早在1986年,马文·明斯基以《心智社会》(Society of Mind, SOM)[2] 之作引领了人工智能领域的一场思想革命。他提出了一个极具创见的理论:心智不需由具有智能的单独部件构成,反而是由一系列简单部件的相互作用集结而成的复杂系统,正是这种集结,催生了我们所认识的智能和意识。这一理念对于构建自主智能体以及其后续发展,产生了不可估量的深远影响。 随着人工智能技术至2023年的飞跃,我们现在可以设想,如果每个微小部件本身都拥有一定程度的智能,它们将如何相互作用,产生何种层次的集体智能。2023年上...
- 下一篇
实例详解构建数仓中的行列转换
本文分享自华为云社区《GaussDB数据库SQL系列-行列转换》,作者:Gauss松鼠会小助手2。 一、前言 在构建数据仓库或做数据分析时,需要对原始数据的结构进行一定的处理,有时涉及到“行转列”,有时涉及到“列转行”,那么这两个转换的方式具体是什么,有什么差异,怎么实现,今天我们将以GaussDB数据库为例,给大家做一下讲解。 二、简述 1、行转列概念 即将多行一列数据转为一行多列显示。通常转化后将某一列分类后的值作为新的列名,将此值对应的多行数据显示成一行。 2、列转行概念 即将一行多列数据转成多行一列显示。通常将转化后的列名为某一行中某一列的值,来识别原先对应的数据。 三、GaussDB数据库的行列转换实验示例 用一张学生成绩来举例:从老师的角度,在录入成绩时,每科老师都会单独录入每个学生的本科成绩。而从学生的角度,学生只关心自己各科的成绩分别是多少。所以如果把老师录入数据作为原始表,那么学生查看自己的成绩时就要用到行转列,如果让学生上报自己各科的成绩,然后老师去查对应学科的学生考试成绩时,那就是列转行了。 1、行转列示例 1)创建实验表(行存表) --创建实验表(行存表) ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装