服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - Intellij IDEA的一些调试技巧(小结)

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

2021-02-20 11:55V JAVA教程

本篇文章主要介绍了Intellij IDEA的一些调试技巧(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

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

下面进入正题。

1 多线程调试

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

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

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

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

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

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

更改idea中的默认设置:切换到"thread" radio button,点击出现的按钮 ”make default"

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

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

intellij idea里在这儿切换

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

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

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

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

2 后退执行

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

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

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

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

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

3 条件断点

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

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

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

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

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

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

4 片断代码

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

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

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

注意,在intellij idea里,这个上面红框,像个小计算器的按钮就是临时执行的功能,点击之后,会弹出按钮下方这个evaluate expression(ctrl+f8)的框,输入代码,点击右下角的evalute即可。返回值会显示在result处。

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

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

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

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

5 查看变量修改值

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

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

常用代码自动补全快捷键

 

快捷键 说明
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 打开最近访问文件列表

 

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

原文链接:https://www.cnblogs.com/softidea/p/7245884.html

延伸 · 阅读

精彩推荐
  • JAVA教程Java程序与C语言的区别浅析

    Java程序与C语言的区别浅析

    Java和C语言虽有相同性,但两者也有一定的不同。Java程序是面向对象的一种简单、分布式 、解释、健壮、安全、结构中立、可移植、高效能、多线程、动态...

    孟月2462020-09-06
  • JAVA教程java按字节截取带有汉字的字符串的解法(推荐)

    java按字节截取带有汉字的字符串的解法(推荐)

    下面小编就为大家带来一篇java按字节截取带有汉字的字符串的解法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来...

    jingxian2482020-06-11
  • JAVA教程java实现投票程序设计

    java实现投票程序设计

    这篇文章主要介绍了java实现投票程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    luosijin1234992020-03-11
  • JAVA教程Java运行环境搭建的图文教程

    Java运行环境搭建的图文教程

    下面小编就为大家带来一篇Java运行环境搭建的图文教程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    lines_T9202021-01-12
  • JAVA教程MyBatis 引入映射器的方法

    MyBatis 引入映射器的方法

    本文通过实例代码给大家分享mybatis 引入映射器的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧...

    LLY1996041811082021-01-06
  • JAVA教程利用spring aop实现动态代理

    利用spring aop实现动态代理

    这篇文章主要为大家详细介绍了利用spring aop实现动态代理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    随缘相识-(志同道合)3752020-08-31
  • JAVA教程Java中的static关键字全面解析

    Java中的static关键字全面解析

    这篇文章主要介绍了Java中的static关键字全面解析的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 ...

    海 子2272020-05-19
  • JAVA教程详解Java中用于查找对象哈希码值的hashCode()函数

    详解Java中用于查找对象哈希码值的hashCode()函数

    Java中入HashMap等一些键值对应的结构,基本上都可以用hashCode()来查找值,接下来我们就来详解Java中用于查找对象哈希码值的hashCode()函数: ...

    冯立彬4442020-05-06