阅读更多

0顶
3踩

非技术

转载新闻 80%的程序员不了解的调试技巧

2017-07-27 16:15 by 副主编 jihong10102006 评论(2) 有9270人浏览
程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。

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

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

下面进入正题。

1 多线程调试

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

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

但是在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。此处把线程的suspend设置成和Eclipse模式一样之后,也可以开始多线程应用的调试。简单设置可以直接在断点处,将suspend改成Thread

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

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的框,输入代码,点击右下角的Evalute即可。返回值会显示在Result处。

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

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

5 查看变量修改值

每个IDE在调试代码时都提供了一个观察当前上下文变量值的窗口。其实除了查看之外,一些非final的基本类型,还可以直接在此处修改值。这样如果多次循环执行时,每次可以恢复到期望的值,不需要重启程序。
  • 大小: 9.6 KB
  • 大小: 245.9 KB
  • 大小: 190.9 KB
  • 大小: 109.3 KB
  • 大小: 79.3 KB
  • 大小: 66 KB
  • 大小: 10.6 KB
来自: 简书
0
3
评论 共 2 条 请登录后发表评论
2 楼 panpan_xin 2017-07-28 15:37
条件断点刚刚知道
1 楼 ahack 2017-07-27 17:19
这些都应该是基础的idea调试技能,eclipse也有,知道的人应该很多。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 80%程序员不了解的调试技巧

    程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。 今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些快速定位问题的...

  • 80%的程序员都不了解的调试技巧

    程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。 :)今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些快速定位问题的...

  • 程序员必备的VS调试技巧

    文章目录一、什么是bug二、什么是调试及调试的重要性1、什么是调试2、调试的基本步骤3、Debug和Release的介绍三、Windows下VS常用调试快捷键四、VS常用调试技巧1、查看临时变量的值2、查看内存信息3、查看调用堆栈4...

  • 程序员这样面试,拿到offer的几率是80%

    一、概述面试,难还是不难?取决于面试者的底蕴(气场+技能)、心态和认知及沟通技巧。面试其实可以理解为一场聊天和谈判,在这过程中有心理、思想上的碰撞和博弈。其实你只需要搞清楚一个逻辑:“面试官为什么会...

  • 做程序员的核心的核心------调试技巧-----超详细讲解

    下面我们看一段话:一名优秀的程序员是一名出色的侦探。每一次调试都是尝试破案的过程。所以我们要:拒绝迷信式调试!调试:(Debug/Debugging),是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。Debug...

  • 实用调试技巧,程序员必备课,如何正确的去找bug,程序员必看的调试技巧

    实用调试技巧,程序员必备课,如何正确的去找bug,程序员必看的调试技巧

  • 大厂程序员的调试技巧,偷学到了!

    本文是学习 WebAssembly 系列的第三篇文章,也是想探究一下 Chrome 开发者工具对 WebAssembly 的调试支持度如何,通过这个探究的过程,我们会了解到 Chrome 调试工具各种方面的使用方法以及作用,发掘你可能不知道的...

  • Java程序员必须知道的10个调试技巧

    调试可以帮助识别和解决应用程序缺陷,在本文中,将使用大家常用的的开发工具Eclipse来调试Java应用程序。但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面。在本文中使用的...

  • 【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?

    面对Bug应如何进行调试,通过具体代码进行调试分析,进一步帮助理解。

  • Java程序员必知的10个调试技巧

    在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序。但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面。在开始之前,推荐大家去看看Eclipse shortcuts这篇...

  • 还在肉眼找bug??赶紧进来!!!程序员一定要学的调试技巧.

    本文介绍了什么是bug,什么是调试,调试重要性,如何调试解决bug,各种常用的调试快捷键,如何写出好代码以及const关键字,assert断言库函数介绍,写代码各种遇见的错误, 调试训练

  • Java程序员应该知道的10个调试技巧

    Java程序员应该知道的10个调试技巧 摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷。对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序。本文介绍了Java...

  • 有哪些老鸟程序员知道而新手不知道的小技巧?

    本来只是分享几条看法,没想到会有这么...注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。 普通程序员+google=超级程序员。 写单元测试总是合算的。 不要先写框架再写实现。最好反

  • Java程序员应该知道的10个调试技巧【转】

    Java程序员应该知道的10个调试技巧 英文原版地址:点击打开链接 中文转载地址:点击打开链接 发表于2012-09-03 14:29| 20653次阅读| 来源javapapers| 5 条评论| 作者JoeEclipseJava研发实践Bug 摘要:调试不仅...

  • GitHub 五万星登顶,程序员命令行最全技巧宝典!

    这份指南从几年前诞生于 Quora 到在 GitHub 上发扬光大,已经衍生了总计 17 种语言版本,其中便包括中文版,想要详细了解的朋友可以直接从下方地址进入,在此便不做多赘述。 中文版获取地址: ...

  • 毕设和企业适用springboot企业健康管理平台类及活动管理平台源码+论文+视频.zip

    毕设和企业适用springboot企业健康管理平台类及活动管理平台源码+论文+视频.zip

  • 基于layui框架的省市复选框组件设计源码

    本项目为基于layui框架开发的省市复选框组件设计源码,集成了115个文件,涵盖75个GIF动画、23个JavaScript脚本、6个CSS样式表、2个PNG图片、1个许可证文件、1个Markdown文档以及多种字体文件。该组件旨在提供一套便捷的省市多选解决方案,适用于各类需要地区选择的场景。

  • LABVIEW程序实例-代码连线.zip

    labview程序代码参考学习使用,希望对你有所帮助。

Global site tag (gtag.js) - Google Analytics