所谓工欲善其事必先利其器,现在idea已经成为java开发者眼中最热门最好用的IDE了。下面这篇文章将总结下idea调试的一些高级技巧。

多线程调试

直接上例子说明,比如下面这段代码

debug模式下调试的时候,发现断点并不会按照我预想的执行,子线程里的断点根本没有执行,两个子线程直接悄无声息的就跑完了。说白了就是我们没有办法进入到线程里断点调试。

有解决方案吗? 当然

我们只需要对断点做一些设置即可:

如上图,把断点的suspend模式改为thread,然后我们再去调试,发现断点可以按照我们预想的执行了。在debug窗口可以通过子线程名选择进入子线程的流程单步调试。

循环遍历条件断点

有时候在遍历一个循环的时候,我们只是想看某个条件下的变量状态。通常情况下都是一遍遍执行直到到达我们想要的条件为止。

其实可以不用这么麻烦,idea提供了条件断点的功能,比如下面这段代码:

我们右键断点位置,设置i=5的条件断点,然后debug执行。会发现程序在i=5的情况下才会进入断点。

显示方法返回值

比如下面这段代码

正常情况下我们调试的时候,是看不到random到底是多少的。解决方法有一个,就是把random的结果赋值到一个变量里,然后在调试窗口观察这个变量的值。

其实idea支持更方便的方法解决上面的问题。调试窗口里的Settings -> Show Method Return Values开关可以显示方法的返回值。

调试过程中动态修改变量的值

比如下面这段代码,

当执行到if分支判断时,可能不会进入我们想调试的分支。通常情况下我们是会在代码里给number写死一个值进行调试。但是这种方式修改了业务代码,如果发布的时候忘记删除,结果不堪设想。

idea有更加优雅的方式解决此类需求。

只需要在debug窗口,通过set value动态修改变量的值,就可以按照我们希望的分支继续执行。是不是很给力!

调试内存泄露

调试内存泄露的关键是能查看堆内存的使用详情,有了详细的信息才好定位出现问题的代码。

我们先写一段示例代码,代码中有各种类型的内存分配。

然后开始debug,在idea的右下窗口打开memory view,

我一般是选择打开这几个选项,

接下来在单步的过程中,就可以看到对象的分配情况。diff栏显示的是每一步对象数目的变化,这个非常有用。因为通过这个你可以看到你的代码对堆内存分配和回收的动作。

参考:

没看这篇干货,别和我说你会IDEA Debug的更多相关文章

  1. Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章

    原创文章,转载请务注明出处 OOP三大基本特性 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏. 继承 继承是指这样一种能力,它可以使 ...

  2. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  3. 转 Redis 总结精讲 看一篇成高手系统-4

    转 Redis 总结精讲 看一篇成高手系统-4 2018年05月31日 09:00:05 hjm4702192 阅读数:125633   本文围绕以下几点进行阐述 1.为什么使用redis 2.使用r ...

  4. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  5. 集合类--最详细的面试宝典--看这篇就够用了(java 1.8)

    看了一个星期源码,搜索上百篇博文,终于总结出了集合类的所有基础知识点,学集合,看这篇就够用了!!! 篇幅有点长, 如果你能全部理解,java最重要的集合就不怕了,秒过面试!!!(本篇素材来自网络,如有 ...

  6. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  7. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  8. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  9. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

随机推荐

  1. Matlab 2019a 下载和安装步骤

    目录 1. 安装包下载 + 多套数学建模视频教程 2. 安装步骤 1. 安装包下载 + 多套数学建模视频教程 参考:https://blog.csdn.net/COCO56/article/detai ...

  2. octave - 用于数值计算的高级交互式语言

    SYNOPSIS 总览 octave [options] OPTIONS 选项 octave 全部命令行选项可以通过运行命令 octave --help 来查看. DESCRIPTION 描述 Oct ...

  3. 使用vim打造python-ide

    一.前言 一直希望在linux下进行python开发,但是linux不想启动图形化界面,所以干脆直接用上了万能的VIM,用VIM打造了属于自己的python-IDE 二.插件 标签导航(tagbar和 ...

  4. python 变量、列表、元组、字典

    python 变量.列表.元组.字典 1.python 变量赋值 2.ptython  列表 3.python 元组 4.python  字典 1.  Python变量赋值     1.1变量的命名规 ...

  5. PAT Advanced 1027 Colors in Mars (20 分)

    People in Mars represent the colors in their computers in a similar way as the Earth people. That is ...

  6. grep 文本过滤

    1.命令功能 grep, egrep, fgrep - print lines matching a pattern 根据匹配模式空间(正则表达式)打印结果行. 2.语法格式 grep   [opti ...

  7. vimdiff 可视化比较工具

    1.命令功能 vimdiff调用vim打开文件,可以同时打开2~4个文件,最多4个文件,且会以不同的颜色来区分文件的差异. 2.语法格式 vimdiff file1 file2 3.使用范例 [roo ...

  8. 前端之JQuery:JQuery基本语法

    jQuery基本语法 一.jQuery基础1.为什么要用jquery? 写起来简单,省事,开发效率高,兼容性好2.什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库(类似py ...

  9. MongoDB的分页排序

    我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单 首先我们看下添加几条Document进来 ...

  10. hdu 6214 : Smallest Minimum Cut 【网络流】

    题目链接 ISAP写法 #include <bits/stdc++.h> using namespace std; typedef long long LL; namespace Fast ...