Idea的一些调试技巧及设置todo
程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。 :)
今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些快速定位问题的方式。
看到这里的朋友,不要马上认为我标题党,再往下看看,如果你还有一些更好用的技巧,欢迎留言。
下面进入正题。
1 多线程调试
开发过多线程应用的朋友应该有体会,有些时候,为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下。
在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响。当然,这里是有个开关的,在Eclipse里默认开启,
但是在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。
此处把线程的suspend设置成和Eclipse模式一样之后,也可以开始多线程应用的调试。
简单设置可以直接在断点处,将suspend改成Thread
![](/assets/blank.gif)
![](/assets/blank.gif)
一个线程断下来之后,可以通过在线程窗口切换,到其它线程中继续运行。
IntelliJ IDEA里在这儿切换
我们看到main线程和pool-1-thread-1这两个线程都处于RUNNING状态,切换到任何一个都可以继续运行。
此时,就可以写一个多线程的应用,同时向ArryList这一类非线程安全的容器中存放内容,然后观察为什么他们是线程不安全的,会出现什么问题,生动又形象。
PS: 这里顺道说一下,这就是为什么创建线程时建议起一个有意义的名字 ,至少是可以识别的名字,否则在这里都不能区分出哪个是自己的线程,想切换还麻烦。
2 后退执行
这里所说的后退执行,是有些时候我们在debug代码时,懒的每个方法都进入单步调试,就会出现你观察一个变量值的变化时,某个方法没跟进去,结果值就变了,不得不重来一次。
依靠后退执行的功能,可以后退,就像下棋时悔棋那种功能一样。当然,这个后退操作的名字是我自己起的,在IDE里被称为Drop Frame。
![](/assets/blank.gif)
有了这个功能,我们在Drop 了当前这个Frame之后,已经改变的变量值不会恢复。比如你向当前调用方法里传入了一个List,并且在方法中向List里添加了内容,那在Drop到调用该方法的地方时,List不会恢复到之前的状态。
但是在该方法再次被调用时,你可以观察List什么时候被改变的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。
3 条件断点
为了调试代码,就需要在要观察变更的地方添加断点,然后小心翼翼的一步步执行。
但是如果是在一个循环里,又或者该方法会被多线程同时调用到的时候,你小心的向下单步调试,发现没有你关心的内容,又从循环开始处跑下来,还是没你的内容,人就开始烦燥起来。
其实,在添加断点的时候,我们可以为断点增加一定的条件,这样,在指定的条件满足时,断点才会生效。
IntelliJ IDEA内,在断点上右击,会弹出如下图的条件框,输入指定的条件即可。
![](/assets/blank.gif)
有了条件断点,不相关,不感兴趣的代码就可以直接跳过了。
4 片断代码
这个没想好用什么名字来表述。有些时候在调试过程中,忽然想招待一段与此相关,但不在源文件中的代码来观察一下,辅助进行问题分析。此时你会停止程序,添加代码然后重新跑一次吗?
在IDEA里有一个执行代码片断的功能,可以在当前代码的上下文内,执行你临时写的代码。
例如,当前方法传入一个List,但这个方法里少一个你后面条件需要使用到的元素,此时你可以临时使用片断代码执行的功能,添加一个进去。
注意,在IntelliJ IDEA里,这个上面红框,像个小计算器的按钮就是临时执行的功能,点击之后,会弹出按钮下方这个Evaluate Expression(Ctrl+F8)的框,输入代码,点击右下角的Evalute即可。返回值会显示在Result处。
![](/assets/blank.gif)
这就就相当于临时改变了变量内容。
然后,还可以调用对象的方法,执行功能,获取属性值等。
![](/assets/blank.gif)
5 查看变量修改值
每个IDE在调试代码时都提供了一个观察当前上下文变量值的窗口。其实除了查看之外,一些非final的基本类型,还可以直接在此处修改值。这样如果多次循环执行时,每次可以恢复到期望的值,不需要重启程序。
![](/assets/blank.gif)
作者:侯树成
链接: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 并设置快捷键
![](/assets/blank.gif)
刚好看到阿里巴巴开发规范的对于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.2 常见返回码 2. 服务端断点调试技巧 3. 客户端断点调试技巧 4. 设置日志级别,并将日志输出到不同的终端 4.1 test下创建Logg ...
- Chrome 中的 JavaScript 断点设置和调试技巧
你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...
- 前端:CSS/15/全局CSS设置,常用的兼容性调试技巧,CSSHACK
全局CSS设置 1,清除所有的标记的内外边距 body,ul,li,a,img,p,input{margin:0;padding:0;} 2,去除项目符号或编号前面的符号 ul,ol,li{list- ...
- 掌握这些操作技巧,设置USB调试模式不难
掌握这些操作技巧,设置USB调试模式不难 如何开启USB调试模式? 什么是USB调试模式? 为什么要开启USB调试模式? 如何关闭USB调试模式? 在这篇教学中,我们会详细向大家讲解USB调试模式的开 ...
- [调试技巧] 如何利用WinDbg找出程序崩溃的位置
http://blog.csdn.net/wangningyu/article/details/6748138 之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个 ...
- js_调试_01_14 个你可能不知道的 JavaScript 调试技巧
更快更高效地调试你的 JavaScript 了解你的工具在完成任务时有很重要的意义. 尽管 JavaScript 是出了名的难以调试,但是如果你掌握了一些小技巧,错误和 bug 解决起来就会快多了. ...
- 14个你可能不知道的JavaScript调试技巧
以更快的速度和更高的效率来调试JavaScript 熟悉工具可以让工具在工作中发挥出更大的作用.尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug ...
- Xcode的调试技巧
转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Glob ...
- iOS调试技巧(转载)
IOS各种调试技巧豪华套餐(转载) 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoin ...
最新文章
- TensorFlow案例实现线性回归
- ROS学习笔记_创建工作空间(一)
- 查看某个进程是否还有外部请求进来
- 【OpenGL从入门到精通】Shader专题
- Java多线程之Synchronized详解
- nil 作比较时应该加上双引号
- [leetcode]Flatten Binary Tree to Linked List
- 解决Mysql的主从数据库没有同步的两种方法
- git 查看修改明细_Git(查看修改记录)
- 09-10c语言试卷a,09C语言试卷A-B(试题).doc
- SketchUp2019下载SketchUp2019下载安装详细教程SU2019草图大师
- 2020中青杯A题集成电路通道布线数学建模全过程论文及程序
- 企业邮箱账号,如何在foxmail上创建
- RTMP推流摄像机联合EasyCVR安防视频云服务平台助力智能楼宇的建设
- 40亿!神州收购宝沃汽车67%股权
- TokenGazer一问到底 | 第29期:研究员 vs IRISnet
- 安卓手机通过termux免root安装kali
- Linux面试相关知识点看着一文就够了
- MySQL数据库(基础)
- 我们不再是冷暖自知的个体
热门文章
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- 关于“三门问题”的一些想法
- 超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道
- redis——Redis中的LRU算法改进
- python计算股票趋势_通过机器学习的线性回归算法预测股票走势(用Python实现)...
- Android Glide图片加载框架(三)缓存机制
- 第二十一届国际C语言混乱代码大赛结果公布
- 解决:[ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective set
- 解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException
- eclipse搜索关键字