找好玩的安卓苹果游戏就来手机游戏库
手机游戏库欢迎您!

idea debug怎么用,idea的debug怎么使用

手机游戏库 2022-11-22 11:21:03 游戏活动 57 阅读

Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。

所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容:

Debug开篇基本用法&快捷键变量查看计算表达式智能步入断点条件设置多线程调试回退断点中断Debug附:JRebel激活一、Debug开篇

首先看下IDEA中Debug模式下的界面。

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

以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。断点:在左边行号栏单击左键,或者快捷键Ctrl F8 打上/取消断点,断点行的颜色可自己去设置。Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口。如果没有自动激活,可以去设置里设置,如图1.2。调试按钮:一共有8个按钮,调试的主要功能就对应着这几个按钮,鼠标悬停在按钮上可以查看对应的快捷键。在菜单栏Run里可以找到同样的对应的功能,如图1.4。服务按钮:可以在这里关闭/启动服务,设置断点等。方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其它类库的方法了,否则这里会有一大堆的方法。Variables:在变量区可以查看当前断点之前的当前方法内的变量。Watches:查看变量,可以将Variables区中的变量拖到Watches中查看

idea debug怎么用,idea的debug怎么使用

[图2.3]

idea debug怎么用,idea的debug怎么使用

[图2.4]

三、变量查看

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

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

idea debug怎么用,idea的debug怎么使用

[图3.4]

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

idea debug怎么用,idea的debug怎么使用

[图5.2]

六、断点条件设置

通过设置断点条件,在满足条件时,才停在断点处,否则直接运行。

通常,当我们在遍历一个比较大的集合或数组时,在循环内设置了一个断点,难道我们要一个一个去看变量的值?那肯定很累,说不定你还错过这个值得重新来一次。

1、在断点上右键直接设置当前断点的条件,如图6.1,我设置exist为true时断点才生效。

idea debug怎么用,idea的debug怎么使用

[图6.3]

3、再说说右边的Filters过滤,这些一般情况下不常用,简单说下意思。

Instance filters:实例过滤,输入实例ID(如图6.5中的实例ID),但是我这里没有成功,不知道什么原因,知道的朋友留个言。

Class filters:类过滤,根据类名过滤,同样没有成功....

Pass count:用于循环中,如果断点在循环中,可以设置该值,循环多少次后停在断点处,之后的循环都会停在断点处。

idea debug怎么用,idea的debug怎么使用

[图6.7]

idea debug怎么用,idea的debug怎么使用

[图6.8]

七、多线程调试

一般情况下我们调试的时候是在一个线程中的,一步一步往下走。但有时候你会发现在Debug的时候,想发起另外一个请求都无法进行了?

那是因为IDEA在Debug时默认阻塞级别是ALL,会阻塞其它线程,只有在当前调试线程走完时才会走其它线程。可以在View Breakpoints里选择Thread,如图7.1,然后点击Make Default设置为默认选项。

idea debug怎么用,idea的debug怎么使用

[图7.2]

八、回退断点

在调试的时候,想要重新走一下流程而不用再次发起一个请求?

1、首先认识下这个方法调用栈,如图8.1,首先请求进入DemoController的insertDemo方法,然后调用insert方法,其它的invoke我们且先不管,最上面的方法是当前断点所在的方法。

idea debug怎么用,idea的debug怎么使用

图[8.3]

idea debug怎么用,idea的debug怎么使用

[图9.1]

idea debug怎么用,idea的debug怎么使用

[图9.2]

十、附:JRebel激活

目前本人一直使用JRebel做热部署工具,效果还算理想,修改Java代码或者xml等配置文件都能热更新。偶尔服务开久了,或更改的文件较多时,热更新没有生效,需要重新启动服务。

这里只是简单说下我在网上看到的一种免费获得永久使用权的方式(非破解),不确定这种方式什么时候不能用。

首先你需要一个Twitter的账号进入这个网址:https://my.jrebel.com/,并登录,如图10.1然后在Install and Acticate里可以得到你的永久激活码。在设置里Jrebel里设置激活码,如图10.3,如果没有安装JRebel插件,先在Plugins里安装搜索安装JRebel插件。

idea debug怎么用,idea的debug怎么使用

[图10.1]

idea debug怎么用,idea的debug怎么使用

[图10.2]

idea debug怎么用,idea的debug怎么使用

[图10.3]

有什么不妥之处或者更好的方式,欢迎留言!

Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注

作者:bojiangzhouhttps://www.cnblogs.com/chiangchou

1、debug是什么呢?

DEBUG是一种计算机程序,为马克2号编制程序的葛丽丝霍波是一位美国海军准将及计算机科学家,有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而卡住了机器的运行。

2、Java程序出错了,定位错误有哪些技巧?

在开发、测试、线上运行的过程中,程序难免会出现问题,如果快速地定位程序的问题,是每个程序员的必修课。

01. 日志是基础

当程序报错,最简单且快速的方法就是查询日志中的报错信息了;所以我们在敲代码的时候,一定不能对 CheckedException 只捕捉不处理。

首先不要忽略异常,第一可以在捕捉到异常后将日志信息输出,要么通过 Throw 或 throws 向上抛,让上层的代码进行处理;

接上,不要捕捉异常后,输出完日志又向上抛出异常,这样当查询定位错误时,会产生误导;

对于捕捉到的异常,最好可以精确地指出具体是什么异常,而不要用 catch(Exception e) 替代;

如果选择了输出异常,那么就要把异常单独打印到一个日志文件中,否则你很可能需要在一大堆日志文件中翻阅查找;

另外,日志信息尽可能的详细,比如方法的入参、与其他系统交互的报文等等。

idea debug怎么用,idea的debug怎么使用

如果你能在日志文件中快速的找到报错信息的话,那么再定位错误程序就容易很多:

通常异常输出能看到报错的类、方法、甚至代码行数,可以先检查程序是不是有显而易见的错误;

如果是开发测试环境,可以通过 IDE 进行代码调试,如果错误每次都可以复现,那就是一个明显的 BUG,如果是部分数据有问题,那么就要分析是程序不严谨,还是数据有问题;

如果是生成环境的话,我们很难进行线上调试,那么只能通过日志来进行具体的分析了,条件允许的话,可以把生产环境的数据拿下来进行检查和调试。

idea debug怎么用,idea的debug怎么使用

02. 完善的监控

很多程序员会说,我的日志都很完善了,还需要监控么?我建议最好是有的,而且监控越完善越好。

首先,通过日志查询问题,通常都是业务人员或用户在操作过程中遇到问题,找到运维和开发之后,我们再去翻日志;如果有监控的话,可以实时地发现问题,提前解决问题。

第二,现在很多项目都不是单台部署,应用部署个几台、几十台甚至几百台都很常见,当发现问题之后,人肉翻日志已经不太现实了,如果有一个日志平台的话,那就会方便很多。

第三,很多公司的项目都是分布式架构、微服务架构,越来越多的服务都是链路调用,A系统调B系统,B系统再调C系统和D系统,这种情况下翻一个服务的访问链路,就需要从几个系统上拿日志,人肉运维是很费时费力的。

idea debug怎么用,idea的debug怎么使用

03. OOM 、CPU 占用率高等异常分析

上面说到的各种错误,基本上是有明确的代码问题,不管是代码本身的问题,还是数据的问题导致代码报错,另外一种不是“显性”的异常(最终可能依然是代码的问题),比如内存使用过高、CPU使用过高、 频繁 Full GC、OOM 等等,通常这一类的问题不好重现、定位困难。

如果有报错信息,首先还是要查找关键报错信息,比如 java.lang.OutOfMemoryError: Java heap space,很明显就是堆溢出;

这时候你需要知道堆里面存的是什么,这样有助于你进行问题的排查:Java 堆用于存储对象实例,如果有大量的对象无法被垃圾回收机制清除,那么超过堆容量限制之后,就会发生溢出;

我们可以使用内存映像分析工具,对堆储存快照进行分析;如果有内存泄漏,可以通过工具查看泄漏对象;如果不存在泄漏的话,可以检查代码中是否有递归、死循环等等。

当然,不同“部位”泄漏和溢出的原因都是不同的,需要具体分析。

idea debug怎么用,idea的debug怎么使用

如果是 CPU 过高,可以通过系统命令来定位问题:

一般 Java 程序 CPU 过高,可能是这几种原因:死循环、计算比较密集、IO 读写高、请求堵塞等等;

通过 top 命令,查看当前服务器占用 CPU 资源最多的进程,得到进程号 PID = 4454;

通过 top -Hp 4454 查询 4454 进程中各个线程的资源使用率;比如有一个线程 4492 占用 CPU 特别高;

通过 printf "%xn" 4492 命令,把线程 id 转化为十六进制;4492 的十六进制是 118c;

使用 jstack 命令打印堆栈信息:jstack 4454 | grep -10 118c;

根据占用 CPU 高的线程的堆栈信息,分析对应的代码在做什么操作,并进行优化。

idea debug怎么用,idea的debug怎么使用

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

idea debug怎么用,idea的debug怎么使用

标签:可以

专题:

相关阅读