00:00
大家好,我是于皮,先问一下你在写代码遇到bug时一般会怎么解决呢?欢迎大家把答案打到公屏上,上着视频想教大家如何写bug,结果有朋友表示不仅不用我教,他们写的比我还多,整的我很没有面子,所以我赶紧做了这期视频,教大家如何解决bug。毫不夸张的说,我从大学到职场学习编程五年多,遇到的99%的bug都能用这几招来解决,而且今天我要把他们全部分享出来,答应我一定要看到最后还有我的终极绝招。其实改bug就跟破案一样一样的,首先在急着去搜索问题改bug之前,我们先做这么几件事,一、获得更多信息。我们要搞清楚bug为什么会发生,什么情况下会发生,用户到底做了什么操作才导致了这个bug呢?是每次都会出现bug,还是说只是点被触发了呢?如果是偶发,那又是否可复现呢?不能复现的bug,那还叫bug吗?
01:14
以上种种信息都很重要,如果可以的话,最好还能拿到用户详细的报错原因、请求,还有响应。二明确边界。说白了就是通过手上的信息搞清楚这个bug到底算在谁的头上。假如说用户访问不了网站了,您可千万别自己搁那儿傻傻的分析一通啊,说不定最后你才发现,诶,这根本就不是我的bug,是用户自己家的网线断了是吧?现在企业开发中往往是多人协作嘛,比如说前端、后端服务提供者和服务调用者,你调用我,我调用你,对吧?一般我们可以通过请求参数和响应参数来划分职责。比如说我是前端请求你后端,我给你发送A,你必须要给我B,那出了bug的话,我一看,诶,我给你的A,你给我B了对吧?啊,那就是我的锅,你给我C了,那就是你的锅了,对吧?一下就把这个责任捋清楚了。三、保护现场确定是自己的bug后,如果是线上出了bug呢,记得要先把当时的程序状态保留下来,比如当内存存储日志之类的,便于后面排查。有了足够的信息后,接下来我们看看怎么解决bug,先不要急着去问别人,可以自己先通过以下方式来解决。
02:38
首先是自主排查,比如对程序的报错,已记录的错误日志进行分析,比如看到一个connection timeout,显然就是数据库链接超时了,对吧?这个时候你就可以先去确认一下是不是数据库或者是网络的问题,说不定就已经能够解决bug了。二、搜索引擎这个就不用我多说了吧,内事不决问百度,外事不决问那不会使用百度的同学呢?建议百度一下如何使用百度。
03:08
但如今的搜索引擎似乎对程序员不太友好,广告多、内容过时,点进去之后文不对题,这些都会成为你搜索的障碍。那大家不妨试试这些技巧,一、搜索词后加上杠,Advertisement可以快速屏蔽广告信息。二使用site域名加搜索词,可以在特定的网站内快速搜索,像现在大部分的bug解决方案基本都在CSDN。三使用百度搜索信息时,我们可以先将错误日志中的关键词拆解出来,比如版本号、数据库类型等等,可以使用空格进行连接,叠加关键词可以更加精准的搜索到想要的结果。四在搜索关键词后添加时间后缀,可以搜索特定时间内关于某关键词的信息。这样我们就可以搜到最近的bug解决方案了。此外,也可以试试开发者搜索,专门面向程序员的搜索引擎纯净了很多,而且看起来它的实现方式也很简单,就只从开发者相关的网站中搜索内容就行了。三、官方文档当我们使用一些冷门技术或者较新的技术时,国内的百度可能很难找到解决方案。
04:23
这时我们不妨打开官方文档,找到和自己问题相关的部分,仔细阅读一遍,诶,说不定就发现是自己的语法或者参数写错了呢。对于组件库和SDK类库的使用,我其实更倾向于去直接阅读官方文档,往往能获得最直接的解决方案。4GITH up如果你使用的是开源项目,那么可以试着在项目仓库的issues中搜索答案,尤其是知名项目,用的人很多,你遇到的bug有可能别人也遇到过,那如果有解决方案呢?就可以直接照搬,就哪怕没有解决方案,你也可以试着联系同样遇到bug的人一起来解决。
05:04
五追溯源码除了依赖冲突、内存溢出之类的技术上的bug,其实我们工作中更多的是修复业务逻辑上的bug,比如说给我三连的同学可以直升满级。那么这种情况也别费功夫在网上搜了,我们就从程序的入口开始,用debug打一些断点,输出一些信息,慢慢调试,肯定都是可以解决的,经验越丰富,解决的可能就越快。如果你怀疑是某个依赖的方法出了问题,那么可以直接点进去查看方法的源码和注释。那如果我们自己无法解决问题,就只能求助了。但是向其他同学提问也是很有技巧的。想要更快、更准确的获得答案,就要把你的问题、场景、前因后果、关键信息都提供清楚,还可以利用paste bin之类的工具分享代码,让别人看得更直观,更好读懂。
06:02
像我每天都会收到上百条提问,其中很多同学真的是连自己要问什么都描述不清楚,那我又怎么帮你解决呢?这不是耽误彼此的时间吗?所以我建议大家去阅读提问的智慧这本免费小说,教你成为一位有智慧的提问者,想好问什么后找谁问呢?一般是两大平台,国内的CSDN相对适合初学者,国外的startflow相对更活跃,解答人数会更多,更专业。哎,毕竟国内的技术氛围。你懂的。如果是开源项目呢,可以考虑在项目仓库下自己提一个新的issues,艾特官方人员去帮你解决。如果你用了别人提供的类库和服务呢?可以在官方文档中联系到项目的维护者,向他们反馈。当然了,你也可以加一些专业人员的好友,加入一些编程交流小队之类的,抱团取暖也都是不错的。
07:00
最后,如果以上方法都解决不了bug,那我就会使用绝招重启。俗话说得好,重启大法好,霸者逃不了。好了,以上就是本期分享,更多的编程干货可以在我的公众号程序员鱼皮获取。如果本期视频有帮助,还请大家多多三连支持。我是于皮,我们下期再见。
我来说两句