Intellij IDEA的一些调试技巧(小结)

程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。 :)

今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些快速定位问题的方式。

看到这里的朋友,不要马上认为我标题党,再往下看看,如果你还有一些更好用的技巧,欢迎留言。

下面进入正题。

1 多线程调试

开发过多线程应用的朋友应该有体会,有些时候,为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下。

在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响。当然,这里是有个开关的,在Eclipse里默认开启,

但是在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。

此处把线程的suspend设置成和Eclipse模式一样之后,也可以开始多线程应用的调试。

简单设置可以直接在断点处,将suspend改成Thread

更改IDEA中的默认设置:切换到"Thread" Radio Button,点击出现的按钮 ”Make Default"

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

IntelliJ IDEA里在这儿切换

我们看到main线程和pool-1-thread-1这两个线程都处于RUNNING状态,切换到任何一个都可以继续运行。

此时,就可以写一个多线程的应用,同时向ArryList这一类非线程安全的容器中存放内容,然后观察为什么他们是线程不安全的,会出现什么问题,生动又形象。

PS: 这里顺道说一下,这就是为什么创建线程时建议起一个有意义的名字 ,至少是可以识别的名字,否则在这里都不能区分出哪个是自己的线程,想切换还麻烦。

2 后退执行

这里所说的后退执行,是有些时候我们在debug代码时,懒的每个方法都进入单步调试,就会出现你观察一个变量值的变化时,某个方法没跟进去,结果值就变了,不得不重来一次。

依靠后退执行的功能,可以后退,就像下棋时悔棋那种功能一样。当然,这个后退操作的名字是我自己起的,在IDE里被称为Drop Frame。

有了这个功能,我们在Drop 了当前这个Frame之后,已经改变的变量值不会恢复。比如你向当前调用方法里传入了一个List,并且在方法中向List里添加了内容,那在Drop到调用该方法的地方时,List不会恢复到之前的状态。

但是在该方法再次被调用时,你可以观察List什么时候被改变的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。

3 条件断点

为了调试代码,就需要在要观察变更的地方添加断点,然后小心翼翼的一步步执行。

但是如果是在一个循环里,又或者该方法会被多线程同时调用到的时候,你小心的向下单步调试,发现没有你关心的内容,又从循环开始处跑下来,还是没你的内容,人就开始烦燥起来。

其实,在添加断点的时候,我们可以为断点增加一定的条件,这样,在指定的条件满足时,断点才会生效。

IntelliJ IDEA内,在断点上右击,会弹出如下图的条件框,输入指定的条件即可。

有了条件断点,不相关,不感兴趣的代码就可以直接跳过了。

4 片断代码

这个没想好用什么名字来表述。有些时候在调试过程中,忽然想招待一段与此相关,但不在源文件中的代码来观察一下,辅助进行问题分析。此时你会停止程序,添加代码然后重新跑一次吗?

在IDEA里有一个执行代码片断的功能,可以在当前代码的上下文内,执行你临时写的代码。

例如,当前方法传入一个List,但这个方法里少一个你后面条件需要使用到的元素,此时你可以临时使用片断代码执行的功能,添加一个进去。

注意,在IntelliJ IDEA里,这个上面红框,像个小计算器的按钮就是临时执行的功能,点击之后,会弹出按钮下方这个Evaluate Expression(Ctrl+F8)的框,输入代码,点击右下角的Evalute即可。返回值会显示在Result处。

这就就相当于临时改变了变量内容。

然后,还可以调用对象的方法,执行功能,获取属性值等。

5 查看变量修改值

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

常用代码自动补全快捷键

快捷键 说明
sout System.out.println(“”);
psvm main方法

常用设置项

常用快捷键

快捷键 说明
Alt + Ctrl + S 打开Settings
Alt + Ctrl + Shift + S 打开Project Structrue
Alt + Enter 快速修复
Alt + / 单词自动补全
Alt + Insert 代码自动生成,比如setter、getter、toString等等
Alt + Shift + V 把类中成员移动到另一个类
Ctrl + Shift + F 格式化代码
Ctrl + Shift + U 大小写切换
Ctrl + Shift + I 根据当前上下文显示代码定义,比如:光标停在方法上就会以popupview方式显示该方法的定义
Ctrl + click 跳到源码
Shift + Shift 搜索所有文件
Ctrl + E 打开最近访问文件列表

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Intellij IDEA 2017 debug断点调试技巧(总结)

    在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦. 下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的,有的人keymap是mac版的,有的是Windows版的. 我的就是Windows,而且修改keymap为eclipse的keymap,因为我算是eclipse转过来的吧. 下面直接看图,详细解释,每一个按钮(按钮对应图中的数字)都是什么功能. 1,rerun XXX,这个就是直接重新跑某个程序. 2,这个

  • eclipse/intellij idea 远程调试hadoop 2.6.0

    很多hadoop初学者估计都我一样,由于没有足够的机器资源,只能在虚拟机里弄一个linux安装hadoop的伪分布,然后在host机上win7里使用eclipse或Intellj idea来写代码测试,那么问题来了,win7下的eclipse或intellij idea如何远程提交map/reduce任务到远程hadoop,并断点调试? 一.准备工作 1.1 在win7中,找一个目录,解压hadoop-2.6.0,本文中是D:\yangjm\Code\study\hadoop\hadoop-2.

  • Intellij IDEA调试技巧的深入讲解

    前言 程序员的日常工作除了写代码之外,很大一部分时间将会在查找 BUG,解决问题.查找 BUG,离不开在 IDE 中调试代码.熟练的掌握调试技巧,可以帮助我们减少查找时间,快速定位问题. 在 IDEA 中调试代码很方便,只要开启调试,在相应代码处使用断点,然后进行相应调试即可.正是因为只要掌握这几个功能,就可以调试代码,所以在很长一段时间内,不了解其他调试技巧.后续深入使用 IDEA 过程中,不断学会 IDEA 其他调试技巧,很大程度上加快调试速度. Step 系列按钮 日常调试的过程中为了为了

  • Intellij idea远程debug连接tomcat实现单步调试

    web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现: 开启debug端口,启动tomcat 以tomcat7.0.75为例,打开bin目录下的catalina.bat文件,如下图,可以看到默认的debug端口是8000,如果本地的8000已经被占用,请改成一个未占用的端口号: 在bin目录下执行命令catalina.bat jpda start,可以启动tomcat并开启远程调试的端口 在Intellij idea中远程连接to

  • 详述IntelliJ IDEA远程调试Tomcat的方法(图文)

    在调试代码的过程中,为了更好的定位及解决问题,有时候需要我们使用远程调试的方法.在本文中,就让我们一起来看看,如何利用 IntelliJ IDEA 进行远程 Tomcat 的调试. 首先,配置remote: 如上图所示,点击Edit Configurations,进入如下界面: 如上图所示,我们进入了Run/Debug Configurations界面,然后点击左上角的+,选择Remote: 标注 1:运行远程 JVM 的命令行参数: 标注 2:传输方式,默认为Socket: 标注 3:调试模式

  • Intellij IDEA的一些调试技巧(小结)

    程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上.甚至说不是在调试代码,就是即将调试代码. :) 今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些快速定位问题的方式. 看到这里的朋友,不要马上认为我标题党,再往下看看,如果你还有一些更好用的技巧,欢迎留言. 下面进入正题. 1 多线程调试 开发过多线程应用的朋友应该有体会,有些时候,为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下. 在IDE里断点停下来

  • Chrome 调试技巧(小结)

    写在前面 本文包括浏览器调试,不包括web移动端调试. 本文调试均在chrome浏览器进行 alert 这个不用多说了,不言自明 console基本输出 想必大家都在用console.log在控制台输出点东西,其实console还有其它的方法: console.log("打印字符串");//在控制台打印自定义字符串 console.error("我是个错误");//在控制台打印自定义错误信息 console.info("我是个信息");//在控制

  • Intellij IDEA Debug调试技巧(小结)

    1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断点 3.使用postman发送http请求 4.请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5.按F8 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则不进入当前方法体内,跳到下一条执行语句. 6.按F7在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则会进入该内嵌的方法中 . 7.继续按F7,则跳到StopWatch() 构造方法中

  • 12个Visual Studio调试效率技巧(小结)

    在这篇文章中,我们假定读者了解 VS 基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果当前程序指针指向一个函数) F10 步过函数(如果当前程序指针指向一个函数) Shift+F11 步出执行的函数 暂停执行 附加到进程 鼠标悬停时快速查看源代码中的元素 调试窗口:局部变量.监视.即时窗口.模块.调用堆栈.异常设置 许多开发人员使用这个功能强大的工具包来处理调试会话.然而, Vi

  • 实用Javascript调试技巧分享(小结)

    见过太多同学调试Javascript只会用简单的console.log甚至alert,看着真为他们捉鸡..因为大多数同学追求优雅而高效地写代码,却忽略了如何优雅而高效地调试代码,不得不说是有点"偏科"了.下面我就分享一些实用且聪明的调试技巧,希望能让大家调试自己代码的时候更加从容自信. 1. 不要使用alert 首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object Object]这种),所以除非你打

  • 详解Angular调试技巧之报错404(not found)

    序言 放假期间,学生忙着充电,学习"全栈开发"的不在少数,我时常收到读者的反馈,在调试<全栈开发之道>一书的实例时,遇到困惑. 尽管会遇到各种各样的问题,但总体来讲,可以归结为一个技术点,那就是-- Angular的调试. 编写Angular 代码并不难,难的是调试Angular代码.对于Angular新手来说,调试Angular需要一个过程,并在这个过程中不断积累经验,一看到报错,就能八九不离十猜出问题出在什么地方. 这篇文章,我们先来从常见的Angular调试技巧讲起,

  • Pycharm调试程序技巧小结

    断点 如图,是pycharm的断点,只需要单击左侧,即可定义该断点,和其他开发软件一样方便.断点的作用是:但程序采取debug方式运行时,程序走到这里,将会停下脚步,展示该断点的详细信息. debug运行 如图,一个蜘蛛的标识,就是debug的运行方式.所谓debug,就是调试的意思.大多数程序设计语言都有专门的调试工具,pycharm也是如此,可以用这个工具来分析程序的动态行为. 调试技巧 1.使用print()打印信息 最开始用pycharm的时候,常用的方法之一: 优点是能够显示程序的动态

  • JS常用函数和常用技巧小结

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数,代码如下: var Ajax = function(url, type success, error) { $.ajax({ url: url, type: type, dataType: 'json', timeout: 10000, success: fu

  • 基于ios逆向过程中lldb调试技巧(推荐)

    假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在使用老一点版本的xcode的话,你又GDB调试器.他们有一些基本的相同的命令,因此假如你的xcode使用的是"(gdb)"提示,而不是"(lldb)"提示的话,你也能够更随一起做,而没有问题. "po"命令是"print object&qu

随机推荐