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

今天我们来谈谈调试代码的一些技巧,在使用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的基本类型,还可以直接在此处修改值。这样如果多次循环执行时,每次可以恢复到期望的值,不需要重启程序。

作者:侯树成
链接:http://www.jianshu.com/p/cfa0f049054e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

TODO是什么说白了它就是一个高亮显示的注释,方便定位的工具。(eclipse也有,小白估计没用过)

IntelliJ idea  预定义了两种TODO模式如下:

\btodo\b.*
\bfixme\b.*

解释一下上面模式啥意思:不懂的时候第一眼这是什么东西啊,其实熟悉正则表达式的人一想也就明白了,它就是两个正则表达式,"正则中“\b”是元字符代表着单词的开头或结尾,也就是单词的分界处。现在我们看上面两个正则表达式“\b   \b"中字符串:todo跟fixme,该表达式单纯表达的意思就是匹配todo.*跟fixme.*

todo可以解释为“要去做的xxx,还未发生”(想一下我们学过的英语动词不定式 to  do  sth),fixme即需要自己修改的,放到编程的注释中就是:

// TODO + 说明:

在该注释处有功能代码待编写,待实现的功能在说明中会简略说明。

// FIXME + 说明:

该注释处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。

下面直接上效果图:下图一选中第一个Pattern

---------------------
作者:aspu O_O
来源:CSDN
原文:https://blog.csdn.net/dyr_1203/article/details/83016441
版权声明:本文为博主原创文章,转载请附上博文链接!

IDEA 中定义自己的TODO 并设置快捷键

刚好看到阿里巴巴开发规范的对于TODO的说明,粘贴出来有需要的可以参考

11. 【参考】特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描, 经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。

1) 待办事宜(TODO):( 标记人,标记时间,[预计处理时间])    表示需要实现,但目前还未实现的功能。  这实际上是一个 Javadoc 的标签,目前的 Javadoc 还没有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个 Javadoc 标签)。

2) 错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])    在注释中用 FIXME 标记某代码是错误的,而且不能工作,需要及时纠正的情况

需要阿里巴巴Java开发手册(1.4.0版本)以及插件 可以去官方的GitHub上下载:https://github.com/alibaba/p3c
---------------------
作者:o猜拳0
来源:CSDN
原文:https://blog.csdn.net/qq_38878455/article/details/82933174
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/softidea/p/7245884.html

Idea的一些调试技巧及设置todo相关推荐

  1. 牛客网项目——前置技术(四):项目调试技巧

    文章目录 1. 响应状态码的含义 1.1 官方网站 1.2 常见返回码 2. 服务端断点调试技巧 3. 客户端断点调试技巧 4. 设置日志级别,并将日志输出到不同的终端 4.1 test下创建Logg ...

  2. Chrome 中的 JavaScript 断点设置和调试技巧

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  3. 前端:CSS/15/全局CSS设置,常用的兼容性调试技巧,CSSHACK

    全局CSS设置 1,清除所有的标记的内外边距 body,ul,li,a,img,p,input{margin:0;padding:0;} 2,去除项目符号或编号前面的符号 ul,ol,li{list- ...

  4. 掌握这些操作技巧,设置USB调试模式不难

    掌握这些操作技巧,设置USB调试模式不难 如何开启USB调试模式? 什么是USB调试模式? 为什么要开启USB调试模式? 如何关闭USB调试模式? 在这篇教学中,我们会详细向大家讲解USB调试模式的开 ...

  5. [调试技巧] 如何利用WinDbg找出程序崩溃的位置

    http://blog.csdn.net/wangningyu/article/details/6748138 之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个 ...

  6. js_调试_01_14 个你可能不知道的 JavaScript 调试技巧

    更快更高效地调试你的 JavaScript 了解你的工具在完成任务时有很重要的意义. 尽管 JavaScript 是出了名的难以调试,但是如果你掌握了一些小技巧,错误和 bug 解决起来就会快多了. ...

  7. 14个你可能不知道的JavaScript调试技巧

    以更快的速度和更高的效率来调试JavaScript 熟悉工具可以让工具在工作中发挥出更大的作用.尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug ...

  8. Xcode的调试技巧

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

  9. iOS调试技巧(转载)

    IOS各种调试技巧豪华套餐(转载) 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoin ...

最新文章

  1. TensorFlow案例实现线性回归
  2. ROS学习笔记_创建工作空间(一)
  3. 查看某个进程是否还有外部请求进来
  4. 【OpenGL从入门到精通】Shader专题
  5. Java多线程之Synchronized详解
  6. nil 作比较时应该加上双引号
  7. [leetcode]Flatten Binary Tree to Linked List
  8. 解决Mysql的主从数据库没有同步的两种方法
  9. git 查看修改明细_Git(查看修改记录)
  10. 09-10c语言试卷a,09C语言试卷A-B(试题).doc
  11. SketchUp2019下载SketchUp2019下载安装详细教程SU2019草图大师
  12. 2020中青杯A题集成电路通道布线数学建模全过程论文及程序
  13. 企业邮箱账号,如何在foxmail上创建
  14. RTMP推流摄像机联合EasyCVR安防视频云服务平台助力智能楼宇的建设
  15. 40亿!神州收购宝沃汽车67%股权
  16. TokenGazer一问到底 | 第29期:研究员 vs IRISnet
  17. 安卓手机通过termux免root安装kali
  18. Linux面试相关知识点看着一文就够了
  19. MySQL数据库(基础)
  20. 我们不再是冷暖自知的个体

热门文章

  1. JAVA实现把指定文件夹下的所有文件压缩成zip包
  2. 关于“三门问题”的一些想法
  3. 超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道
  4. redis——Redis中的LRU算法改进
  5. python计算股票趋势_通过机器学习的线性回归算法预测股票走势(用Python实现)...
  6. Android Glide图片加载框架(三)缓存机制
  7. 第二十一届国际C语言混乱代码大赛结果公布
  8. 解决:[ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective set
  9. 解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException
  10. eclipse搜索关键字