目录

心态

一、如何定位到有问题的bug代码

(1)搜索大法

(2)log输出大法

(3)profiler查看大法

(4)万能法找到页面

二、解决棘手bug的步骤

(1)先看再想最后动手

(2)改变现状

(3)是技术问题还是业务问题

(4)张张嘴远胜于动动手

(5)bug解决不了,那就解决提出bug的人

(6)解决了bug之后

三、如何实现不会的功能

(1)不要急着拒绝

(2)大事化小小事化了

心态要稳,天塌了有个高的顶着

总结


心态

        解决棘手的bug之前,首先要稳定自己的心态。记住,心态很重要。无论这个bug已经造成了线上多么大的影响,你的boss多么着急的催着你解决bug,要有一个平稳的心态才能解决问题,否者,慌慌忙忙紧紧张张的状态下去解决bug,很可能会造成更多的bug!

一、如何定位到有问题的bug代码

(1)搜索大法

双击shift键,页面上有什么就在代码中全局搜索什么,比如标题,按钮名字~找到资源文件布局文件,再进一步搜索用到这些文件的代码位置。

另一个使用Ctrl+Shift+F,可以整个项目进行搜索,可以减少关键字来搜索

(2)log输出大法

在不方便debug的时候,可以输出一些log,通过查看log的输出,可以明确的看出程序运行时的运行逻辑和变量值。

还可以使用写关键操作的日志到android本地的文件夹,来方便查看

(3)profiler查看大法

我们要善于利用AndroidStudio提供的工具,比如profiler。在profiler中可以看到手机中正在运行的Activity的名字,甚至能看到网络请求的详情等等,功能很强大!

(4)万能法找到页面

CodeLocator插件,字节出品,童叟无欺,甚至还可以定位fragment

在 logcat 过滤 ”displayed“,am 会打印。

或者使用adb命令:adb logcat -b events 过滤 am_ 或者 wm_ 也可以


二、解决棘手bug的步骤

(1)先看再想最后动手

        解决bug的第一步,当然是稳定的复现bug。根据我的经验,如果一个bug可以被稳定的复现,至少它就被解决了70%。

通过观察bug的现象,就可以对bug做个大致的归类或者定位了。是因为数据问题?还是第三方库的问题?还或者是代码的问题?

接着就是debug,看日志等常规操作了~

如果经过上面的操作,你还是一筹莫展,那么请往下看。

(2)改变现状

        如果你真的是一点思路也没有,很可能某些可能造成bug的代码也看不太懂。我建议你做一些改变现状的操作,比如:注掉某些代码,尝试其他的输入数据或者操作。总而言之,就是让bug的现象出现改变! 那么你做的这些操作肯定是对这个bug是有影响的!!!然后再逐步恢复之前注掉的代码,直到恢复某些注掉代码之后,bug的现象恢复了。很有可能这里就是造成bug的位置。bug定位了之后,再去思考解决办法。

(3)是技术问题还是业务问题

        在实际的开发过程中,很多问题是通过技术手段解决不了的。可能是业务逻辑就出现了矛盾,也有可能是是因为一些奇奇怪怪的王八的屁股。这类问题要早点发现,早点提出,才能早点解决。有些可能踩红线的问题,作为开发,不要试图通过技术去解决!!!否则可能要去踩缝纫机了~~~

(4)张张嘴远胜于动动手

        我一直坚信,世界上有更多能力比我强的人。我现在面对的bug也肯定不是只有我面对了。张张嘴问问周围的同事,问问网站上的大神,现在网络这么发达,只要别人解决过的问题,就不是问题。

很多时候的bug可能只是因为你对某些领域不熟悉,去请教那些对这个领域熟悉的人,你的问题对他们来说可能不是问题。

(5)bug解决不了,那就解决提出bug的人

        有的时候的bug可能不是bug。提出bug的人可能只是对某些操作或者现象不理解,或者没有达到他们的预期。他们就会提出来,他们觉得现在的程序是有问题的……这个时候可以去尝试解决这个提出bug的人!让他们觉得这不是一个bug。当然你没有这种“解决人”的能力的话,就还是老老实实去解决bug吧~

(6)解决了bug之后

        人的成长在于,遇到了问题,敢于直面问题,解决问题,并让自己今后避免再出现类似的问题!解决了bug,无论这个bug是自己造成的还是别人造成的。要善于总结,避免日后自己再写出类似的问题。


三、如何实现不会的功能

(1)不要急着拒绝

遇到如何实现不会的功能,内心首先不要着急抗拒。

人总要成长,开发的技能如何成长?总不是像流水线工人那样做些一些“熟练”操作吧?总要走出自己的舒适圈,尝试解决一些问题,突破自己的上限吧~

你要知道,在Android开发这个领域,其实没有什么逾越不了技术壁垒!只要别人家有的,你就可能有!别人家做出来的东西,你就能做出来。这种信心,至少要有的~

(2)大事化小小事化了

一个复杂的功能,通常可以分解成一些简单功能,简单的功能就可以攻克!

那么当你在面对要实现一个复杂功能或者没有接触过的功能开发的时候,你所要做的其实就是分解这个功能,然后处理分解后的小功能,最后再把这些小功能组合回去!

心态要稳,天塌了有个高的顶着

遇到问题,尝试解决,实在不行,就要及时向上级反馈。作为你的上级,他们有责任也有能力帮你解决问题,或者至少给你提供解决问题的一种思路。心态要稳,天塌了有个高的顶着。

工作不是生活的全部,工作只是为了更好的生活!不要让那些无聊的代码影响你的心情影响你的生活!


总结

遇到bug,先观察bug现象,然后想想大概是什么原因导致的,然后尝试复现它,再调试它,处理它。思考是什么原因导致的这一步非常重要,不管这个问题是自己导致的,还是别人导致的,都是可以增加经验值的机会。以后别人说一个bug,你就能比别人快一步的联想到发生的可能和处理方法。

对于不方便断点调试的,试试主动抛出异常,这样可以看到这个方法的调用链。获取当前activity的方式,可以通过adb命令获取,adb 有很多好用的命令,只是没有被挖掘而已。例如查看异常:adb logcat -b crash 可以打印最近的一次崩溃信息;

06-21 12:23