太难了,程序员死活找不到的bug,原因竟是“它”

程序员在工作的时候,总是避免不了与bug的相爱相杀,他们之间闹出的笑话也是接连不断,作为一个资深的程序员,今天带大家认识一下这些年,“我们”的相爱相杀。

我们经历的大部分bug有的被其他人修复了并且在互联网分享出来了,这时候我们通过Stackoverflow、Baidu、Google等搜索引擎找到答案了。但是我们在工作中也可能会遇到一些疑难的bug,这里bug我们在搜素引擎上找不到解决方案,可能好几天都不得其解,这些迟迟没有解决的bug往往搞得人焦头烂额。

有一次写JS,自己手机没电了,拿同事老张的安卓机调试,很简单的获取用户微信昵称,结果死活获取不到,一直显示为null。应该是跨平台问题,因为之前在自己iPhone上是没有bug的,拼命看api文档,但是都没提到这方面。急死我了。......刚刚老张告诉我他的昵称就是null。......老张已被打死......前面夸张修辞,老张最后当然没死,腿打断了而已。

之前我是个系统管理员,平时去机房登录服务器时都是站着操作。有一次腰疼,搬了个凳子坐在了机器前面,完蛋,死活登录不进去,提示密码错误。于是我站了起来,重新输入了一次密码,进去了。后来我觉得奇怪,于是抽时间做了测试,发现:只要一坐下,就密码错误,站起来就好了。这个 Bug 在我的职业生涯中持续了好几年,一直以为是什么灵异事件。直到有一天公司升级设备给我换了个键盘。原来是老键盘上有两个键装反了,站着打字是看着键盘,坐着盲打就错了,真的是很无语啊……

为了修改BUG,程序员们也是煞费苦心啦!

#至于如何能高效地修改BUG呢?给大家提一些建议

先根据情况试一下下面的步骤:

1.换个环境试试

2.换个用户试试

3.换个操作方式试试

4.换一下数据试试

5.换个浏览器试试

6.换个版本试试

根据上的情况搞清楚下面这几个问题:

1.这个BUG什么情况下出现?什么情况下不出现?两种情况的区别在哪里?

2.这个BUG之前没有,现在出现了,中间都动了什么?

3.这个BUG生产环境出现测试环境不出现,两个环境区别是什么?

4.同样的功能,这样操作没有BUG,那样有BUG,两个操作的区别是什么?

输出结果与预期不符,这种BUG一般都是由于代码逻辑错误造成的,如果能在开发环境重现,最好解决方法就是单步调试,设定每一步代码的预期结果,然后跟踪判断实际结果是否与预期结果一致,不一致的分析原因,如果在开发环境无法重现,无法单步调试的,可以采用添加输出日志的方式判断哪一步的问题。

系统异常报错,这种情况下需要提取日志,找出错误堆栈信息,这时候最重要的事情是要把堆栈信息看懂、看完整。这是很多经验不足的程序员常见的问题,就知道报错了,报的什么错,这个错代表什么一概不知。而且往往堆栈信息是一个套一个输出。

系统Crash,这个问题常见的原因是负载过高、并发过高、或者配置错误。最常见的就是内存溢出。这时候要首先排除配置错误的原因,主要靠查看Crash Log来分析原因,如果Crash Log没有有用的信息,就得排查硬件、内存、网络等方面的设置,看是否有配置错误的地方。再找不到就在测试环境用开发模式进行压测和调试。

系统响应缓慢,这种问题一般是存在资源竞争或者系统资源不足的情况,先检查服务器内容、CPU、网络情况,如果服务器压力过大,排查应用系统负载情况是否异常,如果这些数据都正常,就需要排查代码中的性能瓶颈,可以采用profile工具或者直接输出时间戳的方式查看哪个操作占用时间最长。特别需要留意依赖第三方接口的情况,比如同步的方式发送邮件、发送短信、写文件等。

最近蛮多同学向我咨询刚刚开始在学习编程的时候的一些问题,对于以后的发展上各个方面都有 一些不理解不是很懂的地方,我个人专门做了一个基础的c/c++专栏帮助大家学习,有什么不理解的也可以随时私聊帮助大家。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191229A0KMNL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券