Idea的一些调试技巧及设置todo

 

 

 

 

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

今天我们来谈谈调试代码的一些技巧,在使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Node.js和npm

安装Node.js和npm 学习了:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450141843488beddae2a1044cab5acb5125baf0882000 转载于:https://www.cnblogs.com/stono/p/6891242.html

c++ cstring 转换 char_cstring.h库常用函数

上周,老师讲了大整数的运算方法,我对大数的存储和运算还有些不理解,仔细思考了一下,其实还是训练孩子对机器存储数据的各种掌握和运用吧。不多想,先期孩子虽然一直学习,但是缺乏对知识的系统整理&#xff0…

Django后台管理之商品分类

商品分类 1.建表字段 1.pid:用来绑定父类的 2.path:用来拼接id,保证查询出的数据是按照层级关系展示的2.concat 把表中的两个字段拼接成一个新的字段,通过as重新命名3.查询语句 1.按照第二步拼接成新的字段的名字进行排序查询…

PMT_Stream数据结构

0123 012345670123456701234567012345671stream_type reserved_1elementary_PIDreserved_2ES_info_length 2ES_info_length …(描述信息)3…(描述信息)4crc32 1 节目号 stream_type 8指示了PID为elementary_PID的PES分组中原始流的类型&#xf…

Maven:基本使用

为什么80%的码农都做不了架构师?>>> 1.项目管理工具: Maven的repository,说白了就是dependency的仓库,它按照一定的规则将dependency存放起来,以作缓存,如果本机的 repository找不到某个depen…

UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)

UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) col(j),求一种方案,而且全部行列之和的和最小 思路:A二分图完美匹配的扩展&#xff…

浅谈web开发以及django的安装和入门

浅谈web开发 1.B/S和C/S结构 B/S:浏览器与服务器进行的交互模式(不需要官方下载的,一夫多妻制) C/S:客户机与服务器进项的交互模式(必须官方下载的,一夫一妻制2.MVC和MVT MVC: M:模型层(Model&#xff0…

大数据可视化html模板开源_大数据时代-可视化数据分析平台必不可少

公众号:不安分的猿人一、项目简介DataGear是一款数据管理与可视化分析平台,使用Java语言开发,采用浏览器/服务器架构,支持多种数据库, 主要功能包括数据管理、SQL工作台、数据导入/导出、数据集管理、图表管理、看板管…

java输出一些内容到日志文件

在eclipse中新建一个项目,在src下新建一个log4j.properties文件,文件内容为下:log4j.rootLogger debug,stdout,D,Elog4j.appender.E org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File E://logs/error.log log4j.appender.E…

PMT_Header-节目映射表的数据结构2

1 标志位 table_id8固定为0x02 ,标志是该表是PAT2段语法标志位section_syntax_indicator 1段语法标志位,固定为13 zero104保留字reserved_12保留字5有用的字节数section_length 12表示这个字节后面有用的字节数&#x…

Django中的Model模型

Model模型 模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。 通常,每个模型对应数据库中唯一的一张表。 每个模型都是django.db.models.Model的一个Python 子类。模型的每个属性都表示为数据库中的一个字段。Django 提供一套自动生成的…

python有多少种模块_python如何查看有哪些模块

Question: 如何查看正则表达式模块re及其相关函数的意义 1、终端命令行下 python >> import sys >> sys.modules ################################### 一长串信息中字段modules对应的模块即为包含的模块。 ################################### >> import r…

浅谈面向对象的javascript几个特性

javascript中的this和new javascript是一门很灵活的语言,尤其是function。他即可以以面向过程的方式来用,比如: function getName() {return 张三 } getName() 也可以以面向对象的方式来用,比如: function User() {th…

【Netty】ChannelHandler和ChannelPipeline

一、前言 前面学习了Netty的ByteBuf,接着学习ChannelHandler和ChannelPipeline。 二、ChannelHandler和ChannelPipeline 2.1 ChannelHandler 在ChannelPipeline中,ChannelHandler可以被链在一起处理用户逻辑。 1. Channel生命周期 Channel接口定义了一个…

TS流头部的调整字段

见 http://hi.baidu.com/xumingxsh/blog/item/7b178903f1fa98014afb512f.html http://hi.baidu.com/xumingxsh/blog/item/ba50dba320a10da3caefd02f.html

electron 入坑记

最近有个想法,想写个简单的应用程序.平时在 Mac上开发,最终有可能运行在 Windows 上.看了一下,Electron 比较简单,应该可以一试. 关于安装 我机器上是有 Node 环境的,按着官方教程 直接 npm install electron 结果运行到 npm install.js就不到了..下午上班有事,也没管他,结果一…

自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术

自动驾驶技术的本质是用机器视角去模拟人类驾驶员的行为,其技术框架可以分为三个环节:感知层、决策层 和执行层,具体涉及传感器、计算平台、算法、高精度地图、OS、HMI等 多个技术模块。目前自动驾驶L3商业化技术已经成熟,L4级/L5…

orcal数据操作

1.将数据库ZHSY完全导出,用户名baseusernj密码baseusernj导出到D:\daochu.dmp中 exp baseusernj/baseusernjZHSY filed:\daochu.dmp fully exp baseuserhf/baseuserhfZJCPDB fileC:\105hf.dmp ownerbaseuserhf 2.导入那个数据库的用户就写那个,第一个是用户名&#…

H264实时编码及NALU,RTP传输(ZZ)

rfc3984 Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1. 按照RFC3984协议实现H264视频流媒体nalu单元 包起始 0x 00 00 00 01H.264 NAL格式及分析器http://hi.baidu.com/zsw%5Fdavy/b ... c409cc7cd92ace.htmlhttp://hi.b…