程序员的工作内容,有不少的时间是用在调试代码上。可以说不是在调试代码,就是即将调试代码。

掌握调试代码的一些技巧,在使用IDE提供的debugger时会快速定位问题的方式。

1.多线程调试


在多线程应用的开发中,有时候为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下。
在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响。当然,这里是有个开关的,在Eclipse里默认开启,
IDE直接在断点处,将suspend改成Thread

一个线程断下来之后,可以通过在线程窗口切换,到其它线程中继续运行,IntelliJ IDEA里在这里切换

可以看到exec-10线程和exec-4这两个线程都处于RUNNING状态,切换到任何一个都可以继续运行。

(可以写一个多线程的应用,同时向ArryList这一类非线程安全的容器中存放内容,然后观察为什么它们是线程不安全的,会出现什么问题)

建议:创建线程时建议起一个有意义的名字,至少是可以识别的名字,否则在这里都不能区分出哪个是自己的线程,方便切换

2.后退执行


有些时候我们在debug代码时,每个方法都进入单步调试,就会出现观察一个变量值的变化时,某个方法没跟进去,结果值就变了,不得不重来一次。
后退执行的功能,可以后退,在IDE里被称为Drop Frame

这个功能,在Drop了当前这个Frame之后,已经改变的变量值不会恢复。比如你向当前调用方法里传入了一个Map,并且在方法中向Map里添加了内容,那在Drop到调用该方法的地方时,Map不会恢复到之前的状态。
但是在该方法再次被调用时,你可以观察Map什么时候被改变的,至少不需要再重跑一遍程序了

3.条件断点


在添加断点的时候,可以为断点增加一定的条件,这样,在指定的条件满足时,断点才会生效
IntelliJ IDEA内,在断点上右击,会弹出如下图的条件框,输入指定的条件即可

有了条件断点,不符合条件的代码就直接跳过了

4.片段代码


在IDEA里有一个执行代码片断的功能,可以在当前代码的上下文内,执行你临时写的代码。
比如,当前方法传入一个List,但这个方法里少一个后面条件需要使用到的元素,此时可以临时使用片断代码执行的功能,添加一个进去。
在IntelliJ IDEA里,这个上面红框,像个小计算器的按钮就是临时执行的功能,点击之后,会弹出按钮下方这个Evaluate Expression的框,输入代码,点击右下角的Evalute即可,返回值会显示在Result处

这就就相当于临时改变了变量内容
然后,调用对象的方法,执行功能,获取属性值。。。。

5.查看变量修改值


IDE在调试代码时都提供了一个观察当前上下文变量值的窗口,其实除了查看之外,一些非final的基本类型,还可以直接在此处修改值,这样如果多次循环执行时,每次可以恢复到期望的值,不需要重启程序

调试快捷键:

  F9:恢复程序
  Alt+F10:显示执行断点
  F8: 跳到下一步
  F7:进入到代码
  Alt+shift+F7:强制进入代码
  Shift+F8:跳到下一个断点
  Atl+F9:运行到光标处
  ctrl+shift+F9:debug运行java类
  ctrl+shift+F10:正常运行java类
  Alt+F8:debug时选中查看值

IntelliJ IDEA 调试技巧的更多相关文章

  1. 深入学习 Intellij IDEA 调试技巧

    程序员的日常工作除了写代码之外,很大一部分时间将会在查找 BUG,解决问题.查找 BUG,离不开在 IDE 中调试代码.熟练的掌握调试技巧,可以帮助我们减少查找时间,快速定位问题. 在 IDEA 中调 ...

  2. (转)Intellij IDEA 2017 debug断点调试技巧与总结详解篇

    背景:详细介绍idea的debug调试过程 Intellij IDEA 2017 debug断点调试技巧与总结详解篇

  3. IntelliJ IDEA 工具技巧

    IntelliJ IDEA 工具技巧 以下都是自己积累的IntelliJ IDEA 使用技巧,比较零碎,观看不便之处还望海涵,如有错误之处还望指正 自己常用,不懂的可以加群询问:244930845 S ...

  4. 【工具】VS2010常用调试技巧(1)

    调试是一个程序员最基本的技能,其重要性不言自明.不会调试的程序员就意味着他即使会一门语言,却不能编制出好的软件.本文就本人在开发过程中常用的调试技巧作下简单呢介绍,希望对大家有所帮助,能力超群者请绕道 ...

  5. Intellij IDEA调试功能使用总结

    Intellij IDEA调试功能使用总结 这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的 ...

  6. Visual Studio高级调试技巧

    1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...

  7. 【转】你所不知道的Android Studio调试技巧

    这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...

  8. VS调试技巧,提高调试效率(转):

    如果你还没有使用过这些技巧,希望这篇博文能帮你发现它们. 它们学起来很容易,能帮你节省很多时间. 运行到光标(Ctrl+ F10) 我经常看见人们是这样来调试应用程序的: 他们在应用程序需要调试的代码 ...

  9. iOS各种调试技巧豪华套餐

    转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...

随机推荐

  1. Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮

    效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...

  2. JAVA集合接口及类

    各接口及类关系图 Iterable 所有集合的初始接口,实现该接口可进行foreach操作,只有一个iterator()方法,并返回iterator类型: Iterable在java.lang下,It ...

  3. 解决Fiddler查看Post参数中文乱码的问题

    解决Fiddler查看Post参数中文乱码的问题 解决方法: 1.win+R 2.打开注册表编辑器:输入regedit +回车+是 3.HKEY_CURRENT_USER\Software\Micro ...

  4. CSS旋转缩放

    <style type="text/css"> figure{ float: left;}.test1{ border-radius: 0px; height: 200 ...

  5. SamplesHashtable

    using System; using System.Collections; public class SamplesHashtable { public static void Main() { ...

  6. Spring中的@Bean注解、@Configuration注解、@Value

    1.首先是注册bean类:@Component.@Responsitory.@Controller.@Service.Configuration这些注解是把要实例化的对象装化成一个bean,放到Ioc ...

  7. 剑指Offer 34. 第一个只出现一次的字符 (字符串)

    题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 题目地址 https:// ...

  8. DG_数据文件转换参数测试

    本篇博客流程图: 一.测试需求及参数说明 二.测试环境进行相关测试 三.问题总结 一.测试需求及参数说明 1.1测试需求说明 DG切换 切换前,数据库版本12.2.0.1,主库rac两节点,备一rac ...

  9. python3 基础整理

    基础语法 1.python中区分大小写 2.查看关键字用 import keyword print (keyword.kwlist) 3.注释 #  单行注释,多行注释的快捷键是ctr+/,取消注释的 ...

  10. oracle note

    null null为无效的,未指定的,未知的活不可预知的值 null不是空格或0 包含null 的数学表达式其结果都为空值 null 永远!= null 判断某个字段为null,用 ename is ...