发现问题怎么办,如何处理,
所谓的Debug的一般流程是什么,
下面是我对此的一些思考总结,
后面还会继续完善补充。

1.处理思路总纲

  1. 发现问题
  2. 查看日志
  3. 没有日志,去找日志
  4. 找不到日志,继续找,有些藏得比较深
  5. 实在找不到日志,想办法打印日志
  6. 看到日志后,根据错误信息定位问题
  7. 仍然无法定位问题,则继续查看日志
  8. 逐字逐句的看日志,发散联想,是否遇到过类似的
  9. 根据日志给出错误信息谷歌百度
  10. 根据日志给出错误信息咨询他人
  11. 使用远程Debug跟踪代码定位问题
  12. 还不行,吃饭散步休息一下,把上面的步骤重新做一遍
  13. 解决问题
  14. 整理总结
  15. 发布博客

有时间的话,我会把上面的处理流程画一个流程图,
上面给出的是提纲式的Debug问题的步骤,
下面我会详细讲一下我的思考:

2.第一时间去看日志!为什么?

发现问题的时候,很多程序员喜欢靠猜去解决问题,
特别是初级程序员,看到问题一顿操作猛如虎,
最后浪费了半天时间也没能解决,毫无进展,
所以一定要养成习惯:发现问题第一时间去看日志。
其实有的程序员发现问题的时候不看日志也能解决问题,
确实如此,瞎猫也能碰上死耗子,但不建议常用,
更多的是他们曾经遇到过类似的问题,解决过,
所以第二次碰的的时候就不会再需要去看日志了,
这个就会让新入门的程序员以为他们也是靠猜的,
从此就养成了一个不好的习惯,不看日志喜欢靠猜,
有时候自己也会发懒,不去看日志,偶尔有奇效,
但尝试几次未果之后还是要回到正路上来,
查看日志,在哪里看?这是很多人上来便会遇到第一个问题。

3.日志在哪里看?

为此我们要学会找到日志,很多人因为不知道日志在哪里,
所有又回到靠猜的老路去了,这个日志在哪里就是第一道拦路虎,
一般来说业务系统在后台都是有日志文件的,
这些日志文件的路径都是可以配置的,
有的在启动脚本里面,
有的在配置文件里面,
有的甚至做到了前台页面里面,
我们可以看到有启动日志,还有业务日志,操作日志等等
这个需要程序员对系统有一定的熟悉,
不过Java系统一般来说都是差不多的,实际上手操作几下就知道了,
如果还找不到日志,没有办法之时又有人想回去继续靠猜了,
其实这个时候可以使用find和grep在Linux文件系统中搜索一下,
看看是否有可疑的log文件,里面可能有错误信息,比如ERROR之类的。

4.实在找不着日志,该怎么办?

如果实在找不着日志,不要灰心,
我们就要想办法让日志自己出现,
一般情况下,通过配置文件比如log4j配置,
打开相应的日志开关和设置好日志的级别比如DEUBG级别,
我们就可以把指定日志打印到指定的文件,
这样日志就好看多了,当然系统可能也会有其他配置文件,
这个需要自己去问去查,不然日志是不会自己凭空出现的,
如果打印日志的开关和日志级别都搞定了,
却发现我们预期的日志还没有怎么办,
这时候可以考虑远程Debug以及在代码中添加相应的日志,
远程Debug自己去查方法,然后跟着代码一步一步走,
看问题出在哪里了,需要一定的调试经验,需要熟悉代码,
否则简简单单的空指针异常都可以搞得人晕头转向,
明明已经调试到有问题的代码了,却看不出来代码错在哪,
在代码中添加相应的日志,可以是临时的日志也可以是永久的,
如果仅仅为了这次定位问题,打印出来相应的错误信息即可,
之后把临时日志从代码中去除,不要提交到代码库中去,
如果是代码设计上的缺陷,需要打印日志的地方而没有打印,
导致出问题的时候不好定位,就可以把打印日志提交到代码库,
这些缺失日志可能不直接和本次处理的问题相关,
但是为了方便以后定位问题,还是不要偷懒的好。

5.有了日志,该怎么看?

其实能够看到日志的错误信息,我们的问题就解决一大半了,
很多日志打印错误信息非常清楚,一看就能知道怎么解决。
如果不能一眼看出问题所在,就需要仔细查看日志,
逐字逐句的看日志,在脑子里面发散联想,提炼关键信息,
为什么要逐字逐句的看日志,因为关键信息就在日志中,
我们经常发现问题好不容易定位出来,
再回去看日志,发现日志已经提示的很清楚了,
如果能仔细看下日志,就能节省很多的时间,
还有就是以前是否遇到过类似的问题,是怎么处理的,
再接下来就是谷歌百度了,
一般先百度,查看中文内容是否有好的解决方案,
国内主要是CSDN,简书,新浪博客等等还是不错的,
不行再谷歌,查看英文内容是否有好的解决方案,
国外主要是stackoverflow,apache, wiki等官方资料。
查找资料也是需要技巧的,网上有一些资料是过时的失真的,
需要自己辨别,多搜索多看,学会快速找到自己需要的信息,
不迷失在信息的汪洋之中,需要掌握一定搜索技巧和经验积累。

6.休息,重复一遍问题定位过程

有些时候,我们定位问题就是解决不了,看了半天都不知道怎么办,
这个时候就需要先休息一下,可以吃个饭散个步,
然后我们再回来看问题,说不定很快就能解决,
我理解是在长时间定位过程中,人会疲劳,就不容易解决问题,
而且会忽略一下细节的东西,思维定式进入死胡同,
休息一段时间之后,可以更好的集中注意力,
并且思维得到了一定的转换,说不定柳暗花明呢~

7.整理总结,发布博客

将定位问题的过程记录下来,在解决之后整理成文档,
然后将其发布到自己的博客是最好不过了。
记下问题的原始信息,包括错误日志的详细信息,
然后附上详细的解决方法,以后自己遇到类似的问题就很好解决,
虽然将其发布到博客不是必须的,
但是将自己的解决方法共享出去,
既可以帮助别人,也可以帮助自己,
说不定别人能提出更好的解决方法,
过了很近之后即使自己忘记了,还可以在找到。

Debug解决问题方法论相关推荐

  1. Error establishing a database connection!

    后来发现在 wp-config.php 有个 debug 的参数,打开这个参数,修改为: define('WP_DEBUG','true'); 修改这个后,非常不错,报了很多错,一堆.... 使用修复 ...

  2. 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗

    最近Jerry把自己写的深入学习SAP UI5系列的几篇文章,发送到自己组建的SAP技术讨论群: Jerry刚学SAP UI5时,对官网上的一些文档理解得不深,后来调试了框架实现,才彻底搞清楚. 有朋 ...

  3. 教学系统设计期末备考【更新】

    一.名词解释 二.单选 错: 不是教学目标功能:约束功能 不是学习风格相关理论模型:情感因素 不是形成性评价中的反馈:指正性 不是教学设计的学科特点:基础性 不是学习者技术素养的组成:表达要素 不是现 ...

  4. 给即将大三的自己一封信

    时间总是过得很快,转眼间你就即将大三了,在这封信的最开始有必要说说大三的重要性,你要明白大三是一个分水岭,它区分人与人之间的差距.首先,大三有很多专业课,计算机网络,操作系统,数据库原理与设计,J2e ...

  5. springboot 实训总结

    文章目录 *做了什么*:做了一个迷你电商系统 *如何做的* : 1.准备好前端框架 2.对前端框架进行分析 3.业务流程分析 4.springboot工程开始实现相应功能 1. 准备好数据库 2. 根 ...

  6. 用好大数据须有大智慧

    拥有大数据是时代特征,解读大数据是时代任务,应用大数据是时代机遇.大数据作为一个时代.一项技术.一个挑战.一种文化,正在走进并深刻影响我们的生活.党的十八届五中全会提出,"实施国家大数据战略 ...

  7. 一个IT工薪族的4年奋斗成果

    关于标题:为了方便传播,使用了"最简化"的一段. 过段时间,考虑改为"大学毕业4年-回顾和总结(11):一个IT工薪族的4年奋斗成果(2012年6月17日~2016年6月 ...

  8. JavaEE基础第9章Java常用类

    第9章Java常用类 字面量的定义方式都是存在常量池中的,常量池中不会存储多个一样的字符串,在定义一个字符串的时候会先去常量池中找有没有存在的,有就将地址传过去,没有就新建. String字符串 概念 ...

  9. 《你的灯还亮着吗》读书笔记

    你想要什么?你在做什么?它们一样吗?你今天比昨天更好吗? 文章目录 一.问题是什么? 1 表层问题 2 深层问题 2.1 谁遇到了问题 2.1.1 电梯使用者遇到的问题 2.1.2 大厦房东遇到的问题 ...

最新文章

  1. python 读取图片成为一维数组_python+opencv 图像的数组和矩阵操作
  2. Spring+MyBatis
  3. [python学习] 专题九.Mysql数据库编程基础知识
  4. php dos命令用不了,windows下如何使用DOS命令强制复制文件
  5. 抖音回应李小璐PGone视频曝光:草稿视频不会上传到后台
  6. CSS颜色代码(转载)
  7. r9270公版bios_换个BIOS再来一次
  8. BP神经网络代码实现
  9. c语言程序怎样输出一个图形,C语言循环输出各种 * 组成的图形
  10. 聚类分析入门(理论)
  11. js将阿拉伯数字转化成大写
  12. 栅格数据中的 Zone 与 Region
  13. IntelliJ IDEA的maven如何提高下载速度
  14. 程序员接私单操作流程。
  15. SpringBoot+支付宝支付(沙箱)
  16. 公安部中标十大身份证阅读器品牌型号
  17. Ubuntu磁盘扩容(简单亲测有效)
  18. 逻辑学笔记全(浙江大学mooc慕课笔记整理:从命题到缪误)
  19. 利用CUDA查看多张显卡可用显存和总显存大小
  20. spring boot 集合 shiro

热门文章

  1. IOS 创建简单表视图
  2. Android 图片异步加载的体会,SoftReference已经不再适用
  3. php的header()函数前有echo输出情况分析
  4. FreeMarker中文API手冊(完整)
  5. 每日一句(2014-9-11)
  6. RegularExpressions(2) RegularExpressions 支持的正则表达式语法
  7. VS2010链接SQLsever2008数据库时出现[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒
  8. linux下进程的创建代码,Linux下进程创建分析
  9. signature=fa342ee2b7c3e3e9cba3f194df2d59ca,Date of Signature
  10. PHP 几个常用的加密函数