前言

“不积跬步,无以至千里;不积小流,无以成江海。”

想成为编程大佬也一样,不经过海量的bug、各种复杂的系统问题的处理经验,那么始终是纸上谈兵的小菜鸟。

那么如何做到遇到bug淡定自若,达到“他强任他强,清风拂山岗,他横由他横,明月照大江”的大佬境界呢?

本文结合自己多年的编程经验,给大家总结了这份bug定位套路大全,也许能对你有所帮助。


一、日志定位法

基本上大部分的bug异常问题,只要能找到相关的异常日志,那么就不用太慌了,根据提示的异常类型和出现位置,很容易就定位出异常原因。
可以说,日志是日常工作中定位bug,修复异常问题的首要依据。

有人可能说,那要是没有异常提示呢?
大部分情况下,可能和日志的输出级别有关。很多时候适当的降低日志级别,会输出更多程序运行的相关信息,给我们的bug修复提供更多的依据。

但要注意,生产环境上要控制好日志的输出级别,如果日志级别过低,可能会导致日志文件增长过快,对服务器的磁盘IO和存储空间造成较大的压力。
在spring boot中我们可以利用actuator组件实现日志级别的动态调整。

二、断点调试法

在开发过程中,遇到程序出现异常或执行效果不符的情况,有时可能只是代码逻辑的一些问题,并不会抛出异常,也就没有了相关的日志输出。这种情况下,最适合的就是在对应的方法打上断点,开启debug模式启动项目,逐步调试分析程序的执行步骤和数据变化的情况。

程序员老鸟都知道,能断点调试的bug,都不叫什么bug。

断点调试又分为2种情况:
1、本地断点调试
2、远程断点调试

很明显,本地断点调试是我们日常开发过程中用的最多的,在idea中给程序打上断点,然后通过debug模式启动项目,调用对应的方法,进入断点后通过F7和F8逐步调试。适用于本地开发环境。

而远程断点调试则是通过和远程运行的程序建立websocket连接来进行断点调试,本地的项目不用启动。适用于测试环境和生产环境。

三、google、百度大法

程序员圈子里有很多有趣的鄙视链,比如搞C的看不起搞java,搞java的看不起搞php的。
这里也说一条,用google的瞧不起用百度的。

但是我想说,年轻人才做选择,作为程序员老鸟,我都用。一般来说,百度更适合中国人的口味,搜索出的内容量也会比较多,但是过滤出高质量符合自己的场景的文章有时候比较费事。
google的话,感觉搜索结果中的文章质量会高很多,特别是针对国外的一些网站。

当遇到一个看不懂的异常时,将那一大串不明觉厉的异常日志直接扔到google,百度里,立刻搜出来各种大牛的处理问题的相关博文,这酸爽,大家都懂的。

当然,最关键的是搜索的关键字,这取决于你对bug现象的描述,越言简意赅搜索到的信息反而越多。

四、stackoverflow大法

如果你从事编程多年,还不知道stackoverflow这个牛逼的网站,我只能说你可能是个假程序员。
在这个网站里,你基本上可以找到你开发过程中遇到的所有bug。

如果找不到,你还可以在里面发起提问,会有很多大神给你提供思路和答疑,当然前提是你的英语还不错。

五、问题复现法

一般本地开发环境的异常问题都比较容易复现,比较困难的是测试环境,生产环境的异常问题。
比如网络问题导致的请求失败,服务器配置问题导致请求被拒绝,数据结构和数据记录不一致导致的异常,GC异常,偶然性或周期性出现的异常等等。

总的来说,就是开发环境和测试、生产环境的环境不一致导致问题很难复现。

1、尽可能减少程序运行环境之间的差异
2 、扩大日志记录的时间,记录多个异常周期内的日志
3、记录请求的入参出参
4、本地模拟环境重线异常问题

当你本地能复现问题后,就可以随便整了,可以采用各种手段尝试解决问题。成功后将解决方案照搬到生产环境就可以了。

六、排除法

很多异常很可能可以由多种原因引发,这时候你就需要采用排除法,针对每一个可能的原因去尝试。
还有的时候,针对一些中间件,组件参数的优化,也可以采用排除法。

在你对异常情况没有清晰定位的时候,可以采用排除法,尽可能的缩小异常查找的范围,进而定位问题。

七、同类比较法

这个也是我在开发过程中常用的一种异常定位办法。
典型的场景是,明明是相同或者类似的一个功能模块,A模块里面能正常运行,B模块里面缺一直出现问题。
这时候比较笨的办法就是仔细比较2个模块里面这个功能实现有哪些差异,做一些对应的调整。

程序员不能光会Ctrl+C 和 Ctrl+ V,你可能需要更多的思考。

八、官方文档法

一般来说,官方文档是一个技术或框架的最准确的说明文档,是我们程序开发过程中最直接、最正确的首要依据。

很多时候在网上找的博客文章,往往由于没有说明问题的上下文环境,中间件或组件的版本不一致,导致对自己的问题定位没有什么指导价值。

这时候,通过官方文档你可以获取最正确的第一手资料,是帮助我们定位异常的重要依据。

查看官方文档的时候,一定要选择和自己项目中一致的版本号。

九、源码分析法

真正的大神,定位问题的手段往往都朴实无华。

各种问题都能够直接怼源码,通过手撕源码,达到“他自狠来他自恶 我自一口真气足”的大神境界。

任你异常变化万千,通过跟踪源码,直指问题核心,定位异常原因。

阅读源码这招威力虽然强大,但是对使用者的“内功”会有较高的要求,非3,5年内功不可轻易修炼,使用者需要量力而行。

十、大神求教法

开发过程中,bug万千,作为一个新入职场的小菜鸟,阅历尚浅,内功不够,遇到bug后,首先还是要自己多思多想,尽力尝试分析原因,独自解决问题。

每解决一个bug就是自己程序人生的一次成长的机会,所以不要轻易放过。

当尝试无果后,需要梳理好问题的上下文以及前因后果,然后施展终极大招——大神求教法。这里的大神可以是团队里的老人,可以是技术社区的大佬,可以是技术群里的高人。

得到大佬指点后重新尝试,解决问题后,需要做好相关的异常解决笔记,日积月累之下,自然也成为了同事眼中的大神。


总结

本文主要给大家分享了自己工作多年的bug处理经验,希望大家所有收获,遇见bug再也不慌。

最网最全bug定位套路,遇见bug再也不慌了相关推荐

  1. emlog模板 超帅的资源娱乐网模板 全版本兼容 修复各种bug

    介绍: emlog5.3.1-6.0.1全版本兼容 文字广告有动态效果 文字广告在index.php第12行开始 修复了各种bug 友联在 后台-链接 添加 网盘下载地址: http://kekewa ...

  2. 软件测试面试了十几家公司,全是这种“套路题”

    目录 一.问题预测 二.介绍一下公司项目 三.技能方面 四.你还有什么想问的吗(必答) 五.简历模板 一.问题预测 1. 让简单介绍下自己(每次面试开场) 2. 让说下自己会的内容 3. 看了哪些书籍 ...

  3. 走完线上 BUG 定位最后一公里

    简介:因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下.是否有简单快捷的办法呢? 一个小故事 周末12点的闹钟在回龙观均价3000的出租屋急促的响起,程序员小 ...

  4. 这些解决 Bug 的套路,你都会了不?

    最近整理了我原创的 140 篇编程经验和技术文章,欢迎大家阅读,一起成长!指路:https://t.1yb.co/ARnD 大家好,我是鱼皮. 学编程的过程中,我们会遇到各式各样的 Bug,也常常因为 ...

  5. 天珣内网安全管理系统为金融内网保安全(转)

    天珣内网安全管理系统为金融内网保安全(转)[@more@] 如今,我国的金融体系在经受了多次金融结构调整以后,建成了以省.市级.县级多层次的网络结构,并开始依靠互联网来提升自身业务能力和用户满意度.而 ...

  6. 【软件测试】全网火爆,实战Web项目前后台的bug定位(超详细)

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  7. 电商运营-跨境开网店全图解

    书名:轻松学跨境开网店全图解(亿贝+亚马逊出口篇) 作者:潘兴华 张鹏军 崔慧勇 出版社:中国铁道出版社 出版时间:2016年05月 鼠标

  8. 网贷,高利贷,套路贷为什么必须铲除?

    网贷.高利贷.套路贷该不该铲除,我觉得应该要具体问题具体分析.我个人觉得正规的网贷应该积极的引导和规范,而高利贷套路贷必须彻底铲除. 在回答这个问题之前,我们先来了解一下什么是网贷,什么是高利贷,什么 ...

  9. 缺陷定位 | 如何精准效率分析推测BUG定位(二)

    点击上方"蓝字",轻松关注我们 明天就是除夕了,很多人都回到了老家,吃上了妈妈做的饭菜,这时候应该是最幸福的时刻,我也用年前上班仅剩的几小时把 缺陷定位(二)分享给大家,希望大家能 ...

最新文章

  1. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...
  2. npc寻路问题 c++_《原神》游戏中最懒的NPC出现了,她要玩家找一朵甜甜花
  3. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
  4. JZOJ 4238. 【五校联考5day2】纪念碑
  5. TVS二极管,双向封装,如何选型?
  6. boost::hana::zip_shortest用法的测试程序
  7. 表中字段变化sql语句如何出现
  8. jmstemplate 获取队列id_学习Linux(38)消息队列
  9. Javaoop_继承
  10. 互联网创业项目失败的7大特征
  11. powerShell中 diff的使用
  12. 机器学习入门:线性回归及梯度下降(附matlab代码)
  13. java安全框架下载文件_java安全框架之Permission学习笔记
  14. 直播电商源码,无加密
  15. 不同产品类型、不同应用、产能、产量、销量、需求量及销售收入-外置固态硬盘
  16. Stata:各类全要素生产率TFP估算方法
  17. Java 自定义按时间先后顺序排序集合
  18. ActiveMQ从入门到精通(全)
  19. hadoop集群基本配置
  20. iOS下载JPG图片会被压缩问题

热门文章

  1. Oracle XE简介
  2. js函数前面加分号的作用
  3. 带您遨游太空,美摄科技为航天创意小程序提供全面技术支持
  4. VMware虚拟机联网桥接方式和nat方式
  5. 华为鸿蒙不再孤单mmes,鸿蒙OS加持!曝华为Watch3有望下周发:圆表盘、支持eSIM通话...
  6. 第一章(1.1)——知识图谱简介
  7. 全球与中国1,1‘-联-2-萘酚市场深度研究分析报告(2022)
  8. Java经典面试题:HashMap和HashTable以及ConcurrentHashMap分析
  9. 浏览器指纹追踪技术,如何完整修改浏览器指纹?
  10. 无线充电宝有用吗?有没有好的无线充电宝推荐