程序员的工做内容,有很多的时间是用在调试代码上。能够说不是在调试代码,就是即将调试代码。java
掌握调试代码的一些技巧,在使用IDE提供的debugger时会快速定位问题的方式。程序员
在多线程应用的开发中,有时候为了观察多个线程间变量的不一样状态,以及锁的获取等,就会想到在代码里加个断点debug一下。
在IDE里断点停下来的时候,能够切换到另外的线程中,跑其余的代码,不会互相影响。固然,这里是有个开关的,在Eclipse里默认开启,
IDE直接在断点处,将suspend改为Thread安全
一个线程断下来以后,能够经过在线程窗口切换,到其它线程中继续运行,IntelliJ IDEA里在这里切换多线程
能够看到exec-10线程和exec-4这两个线程都处于RUNNING状态,切换到任何一个均可以继续运行。lua
(能够写一个多线程的应用,同时向ArryList这一类非线程安全的容器中存放内容,而后观察为何它们是线程不安全的,会出现什么问题)spa
建议:建立线程时建议起一个有意义的名字,至少是能够识别的名字,不然在这里都不能区分出哪一个是本身的线程,方便切换线程
有些时候咱们在debug代码时,每一个方法都进入单步调试,就会出现观察一个变量值的变化时,某个方法没跟进去,结果值就变了,不得不重来一次。
后退执行的功能,能够后退,在IDE里被称为Drop Framedebug
这个功能,在Drop了当前这个Frame以后,已经改变的变量值不会恢复。好比你向当前调用方法里传入了一个Map,而且在方法中向Map里添加了内容,那在Drop到调用该方法的地方时,Map不会恢复到以前的状态。
可是在该方法再次被调用时,你能够观察Map何时被改变的,至少不须要再重跑一遍程序了调试
在添加断点的时候,能够为断点增长必定的条件,这样,在指定的条件知足时,断点才会生效
IntelliJ IDEA内,在断点上右击,会弹出以下图的条件框,输入指定的条件便可对象
有了条件断点,不符合条件的代码就直接跳过了
在IDEA里有一个执行代码片段的功能,能够在当前代码的上下文内,执行你临时写的代码。
好比,当前方法传入一个List,但这个方法里少一个后面条件须要使用到的元素,此时能够临时使用片段代码执行的功能,添加一个进去。
在IntelliJ IDEA里,这个上面红框,像个小计算器的按钮就是临时执行的功能,点击以后,会弹出按钮下方这个Evaluate Expression的框,输入代码,点击右下角的Evalute便可,返回值会显示在Result处
这就就至关于临时改变了变量内容
而后,调用对象的方法,执行功能,获取属性值。。。。
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时选中查看值