IDEA如何在DEBUG中输出耗时

一、介绍

在今天进行debug的时候,我突然想知道一段业务代码执行需要多少时间。

这也很简单,打上日志输出耗时就行了。

可是,当时的项目已经debug启动,想要输出还得改代码,还得重新启动

这就很麻烦了,有没有什么其他方法呢?

还真的有,这个IDEAdebug带的功能,我们使用下就可以进行输出耗时了,如下

二、代码

假设我们有这么一段代码,中间的睡眠,我们模拟业务的方法调用

image-20240328215021822

我们只需要在前面打上断点

image-20240328215134615

image-20240328215236439

需要在这里输入什么代码呢?

本文考虑的是耗时,所以我找了一个工具类,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.banmoon.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.util.StrUtil;

/**
* DEBUG时,执行的耗时扩展工具
*
* @author banmoon
* @date 2024/03/28 14:53:24
*/
public class TimeIntervalUtil {

private static TimeInterval timeInterval;

/**
* 初始化计时器
*/
public static String init() {
return init(false);
}

/**
* 初始化计时器
*
* @param isNano 是否使用纳秒计数,false则使用毫秒
*/
public static String init(boolean isNano) {
timeInterval = DateUtil.timer(isNano);
return StrUtil.format("计时开始,当前时间:{}", DateUtil.now());
}

/**
* 分组计时
*
* @param groupId 分组ID
*/
public static String start(String groupId) {
timeInterval.start(groupId);
return StrUtil.format("分组计时开始,分组ID:{},当前时间:{}", groupId, DateUtil.now());
}

/**
* 耗时输出
*/
public static String intervalPretty() {
String pretty = timeInterval.intervalPretty();
return StrUtil.format("耗时:{}", pretty);
}

/**
* 耗时输出
*/
public static String intervalPretty(String groupId) {
String pretty = timeInterval.intervalPretty(groupId);
return StrUtil.format("分组ID:{},耗时:{}", groupId, pretty);
}


}

代码比较简单,都看懂了吧

我们只需要输入这样的方法,一个断点一条

1
2
TimeIntervalUtil.init()
TimeIntervalUtil.intervalPretty()

image-20240328215640664

这两个断点是黄色的,这种是不会打断执行的。那么执行一下看看效果,成功!!

image-20240328215936793

三、最后

当然了,上面只是试了其中的一个计时api,还可以使用分组计时,具体自己看下文档吧。

这个功能,我常常这样使用。在我们发起调用后,突然发现方法中,某个变量要改动,一次还行,多次调用排查问题就会显得很麻烦。

我直接上面那样操作一下,赋值某个具体的值。这样,就不用每次进行修改赋值了。

比较常见于使用的token是这个人的,调试的时候不想改token,我直接改那个从token中拿出来的userId

我是半月,你我一同共勉!!!