java 高级调试_这几个IDEA高级调试技巧,用完就是香

b30fdc704ad4a471be50f88de9a66b13.png

一个项目启动两次

测试分布式项目时,经常要一个项目启动2次,不用将一个项目打开多次启动,配置一下即可

1.点击Edit Configurations

8a74697387acbe4c4c219c271f1bc557.png

2.勾选Allow parallel run

45251c8c7456c4c8780bec5e0feace9a.png

3.依次点击如下2个按钮

738f3153f67c4af5fa9f1bf3cd15c2d4.png

条件断点

有如下代码,只想让它在i == 10的情况下停下来

@Test

public void condition() {

for (int i = 0; i < 30; i++) {

System.out.println(i);

}

}

1.鼠标左键在行数上加上断点

2.在断点上右键加上条件

3.点击Done按钮

48cab7895a324d07934303857418235e.png

此时断点上会有问号,表示这是一个条件断点,右键点击即可查看条件

8ce5851d6d0474768908b87ea9f460ec.png

多线程调试

当有多个线程时,我们如何控制线程的执行顺序呢?

@Test

public void thread() {

new Thread(() -> {

System.out.println("我是线程1-1");

System.out.println("我是线程1-2");

System.out.println("我是线程1-3");

}, "线程1").start();

new Thread(() -> {

System.out.println("我是线程2-1");

System.out.println("我是线程2-2");

System.out.println("我是线程2-3");

}, "线程2").start();

System.out.println("主线程");

}

例如让线程1和2依次执行如下代码

System.out.println("我是线程1-1");

System.out.println("我是线程2-1");

System.out.println("我是线程1-2");

System.out.println("我是线程2-2");

普通模式debug模式下是做不到的,因为我们没办法控制线程的执行顺序。需要做如下设置

1.右键点击断点,选中Thread(Make Default表示把当前选中的Thread设置为默认值)

13be6f525315d3147c2a41c5a75b6a7f.png

设置后的断点如下,3个断点都是Thread模式

122e878b433c4bba12e60be5f771326f.png

执行到某个语句想切换线程的时候选中下一步要执行的线程即可

c2414e013e06a92505ad544276a3805f.png

临时执行表达式/修改变量值

代码如下

public class User {

private String username;

private Integer age;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

@Test

public void changeValue() {

User user = new User();

user.setUsername("aa");

System.out.println(user.getUsername() + " " + user.getAge());

}

在输出语句上加上断点

317552b9adf3b96b7c2f5fe56579e964.png

在断点处执行了

user.setAge(10);

最后的输出结果为

aa 10

我们也可以直接右键选中Set Value修改username属性等

2b97baed8490b58bb3afe022c9e626c1.png

回退

b55d8443cf9df9976b6f0c6020922db9.png

当断点执行到method2()时,想回退到method1时,点击如下按钮即可

d842d99eba716214df0722c8167e7dd6.png

需要注意的是,断点回退只能重新走一下流程,某些改变了的数据是无法回退到之前的状态,如对象、集合等等

欢迎关注

关注回复 pdf目录 有惊喜,海量视频资源访问 www.erlie.cc

参考博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值