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

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

2.勾选Allow parallel run

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

条件断点
有如下代码,只想让它在i == 10的情况下停下来
@Test
public void condition() {
for (int i = 0; i < 30; i++) {
System.out.println(i);
}
}
1.鼠标左键在行数上加上断点
2.在断点上右键加上条件
3.点击Done按钮

此时断点上会有问号,表示这是一个条件断点,右键点击即可查看条件
多线程调试
当有多个线程时,我们如何控制线程的执行顺序呢?
@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设置为默认值)

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

执行到某个语句想切换线程的时候选中下一步要执行的线程即可
临时执行表达式/修改变量值
代码如下
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());
}
在输出语句上加上断点

在断点处执行了
user.setAge(10);
最后的输出结果为
aa 10
我们也可以直接右键选中Set Value修改username属性等

回退

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

需要注意的是,断点回退只能重新走一下流程,某些改变了的数据是无法回退到之前的状态,如对象、集合等等
欢迎关注
关注回复 pdf目录 有惊喜,海量视频资源访问 www.erlie.cc

参考博客
[1]https://www.cnblogs.com/jun1019/p/9741224.html
[2]https://www.cnblogs.com/chiangchou/p/idea-debug.html
这几个IDEA高级调试技巧,用完就是香的更多相关文章
- idea 高级调试技巧
两年前写过一篇关于idea的高级用法,今天再来一篇关于调试方面的技巧讲解: 一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右 ...
- Visual Studio高级调试技巧
1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...
- 你可能不知道的IDEA高级调试技巧
一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可 ...
- 很多.net 程序员不知道又非常重要的 .net高级调试技巧.调试别人的dll方法内的变量
事情是这样的, 最近需要开发Orcale的数据库. 于是使用了EF 加上 Oracle.ManagedDataAccess.Client 这个Oracle.ManagedDataAccess 很好用, ...
- JS高级调试技巧:捕获和分析 JavaScript Error详解
前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...
- Android Studio 实用调试技巧
Android Studio 是个发工具,其自身带调式环境是很强大的,我们要摆脱只会使用Log打印日志的低效的方法,掌握高级调试技巧对每个Android开发者都是很必要的,废话少说,直入正题 调试方式 ...
- 一探前端开发中的JS调试技巧
前言 调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...
- Linux c c++ 开发调试技巧
看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Doc ...
- 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容
http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或 ...
随机推荐
- ionic3 打开相机与相册,并实现图片上传
安装依赖项等: $ ionic cordova plugin add cordova-plugin-camera $ npm install --save @ionic-native/camera 创 ...
- 系统学习javaweb4----CSS层叠样式表(结束)
摘要:这几天临近过年,事情有点多,学习总是段段续续的,今天总算完成了CSS的基本知识学习. 学习笔记: 西瓜学习javaweb 1.css简述. 1.1 css是什么?有什么作用? HTML----- ...
- H5的localStorage使用总结
一.localstorage 的优缺点 优点: 1.localStorage 的存储大小是5M,而cookie的存储大小只有4K,解决了cookie存储空间不足的问题 2.localStorage 可 ...
- Vue创建项目及基本语法 一
目录 目录: 一.创建Vue项目 0.使用环境要求及说明 1.使用命令创建项目 2.启动项目 二.简单指令 1.变量: 2.动态绑定变量值 3.v-once指令 4.v-html解析html 5.v- ...
- Socket设置超时时间
主要有以下两种方式,我们来看一下方式1: Socket s=new Socket(); s.connect(new InetSocketAddress(host,port),10000); 方式2: ...
- CentOS-SendMail服务
title date tags layout music-id CentOS6.5 SendMail服务安装与配置 2018-09-04 Centos6.5服务器搭建 post 456272749 一 ...
- 3)ARP到底属于网络层还是链路层
说白了 就是有些协议起到了承上启下的作用 比较模糊 很难给出一个精确的定位
- 吴裕雄--天生自然python学习笔记:python文档操作表格处理
表格也是 Word 文件中常用的对象,下面讲解 Win32com 中常用的表格操作命令 . 新建表格的语法为: 在 Word 文件中新建一个表格并插入单元格内容 在 Word 文件中新建一个 3 行 ...
- nonparametric method|One-Mean t-Interval Procedure|
8.4 Confidence Intervals for One Population Mean When σ Is Unknown 原先是 standardized version of x bar ...
- Python 装饰器 多装饰器同时装饰一个函数 多参数函数
装饰器是在不修改源代码的情况下,使用装饰器增加原函数的功能. 在软件开发中有一个原则——"开放-封闭",简单地说就是已经实现的功能不允许被修改,但可以被扩展. 封闭:已经实现的功能 ...