bug调试技巧

宝典之一 : 坚信一个原则,程序不会说谎,一定是有原因的

多数的错误表现看起来莫明奇妙,甚至不可思议

但当我们找到问题后会发现:其实问题的根源是如此简单、如此的合乎道理。

这就要求我们:

1、保持一种淡定的心态,耐心地来查找问题

2、仔细看日志:

对着满屏幕的英文错误日志,不要慌,不认识的单词慢慢翻译,一定要仔细查找问题最初抛出的日志关键描 述。

3、善于分析关键字

大部分的错误互联网上是有解决方案的,但因为搜索关键字的选择错误,导致这些解决方案不被我们看到。

一定要善于在错误日志种分析出关键的那几个“错误字眼”

4、相信谷歌比百度更容易找到答案

宝典之二:链路大法

程序系统,就像一张复杂的电路网,程序的调用、数据传递过程,就像电流在电路流转。

当这张网出问题时,我么顺着链路一点点的查找,总能找到问题点根源。

我们拿一个简单的链路来举例:

假设现在灯泡不亮了,面临这样一个链路,在没有任何调试数据时,我们可以说整个链路都可能是有问题的:

(用红色表示有问题的链路)

那么我们调试的方案如下:

1、从起点开始:调试是否有电?

把正负极连接一个没有问题的灯泡(绿色表示确定没问题):

首先我们得找一个没有问题的灯泡来调试,如果这时还不亮,那说明电源有问题。

2、如果电源没问题,我们再调试A点:

依次如上调试,最终我们肯定能确定问题根源。


我们把电路更换为程序链路来看一下:

同理,从入口调试开始,先调试Nginx有无问题:

同样地,我们需要先建立一个“确信点”,就像那个“没问题的灯泡”,对于nginx来讲,我们可以建立一个最简单的server来调试:

如果确定nginx没问题,我们再依次确认A、B有无问题,有时模块的调用无法全链路调用调试,比如问题只发生在A掉B的时候,这时候curl,telnet就是我们有力的工具了,这个时候细展开链路可能会是这样子的:

我们无法确认是B服务有问题了,还是k8s网路服务有问题了,此时我们可以在服务B中通过curl请求自己来确认:

curl http://localhost:8080/api/xxx

  

总之,链路大法的关键是要找一个“没有问题的灯泡”去调试某个链路点,比如建立简单的nginx server节点、curl、ping等等,

通过一个我们确认没有问题的方法,一个个去排查链路上的问题。

宝典之三:不要相信自己的猜测,眼见为实

抛弃“我以为、我觉得、我猜测”

即使是你认为没问题的链路点,也一定要亲自调试,亲眼见到才确定


易族智汇(javashop)原创文章

bug调试宝典的更多相关文章

  1. geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践

    眼看就要端午节了,屌丝还在写代码,话说过节也不给轻松,折腾了一天终于解决了一个BUG,并完成了老板安排的求DEM坡度的任务,那么就分两段来表. 一.BUG调试 首先记录一天的BUG调试,简单copy了 ...

  2. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  3. 最难忘的Bug调试经历

    摘要:目前,著名的社区问答网站Quora上出现一个很火的讨论:你调试过最难的Bug是什么?大家纷纷留言,把自己最痛苦的一次调试经验写下来. 相信每位程序员都有过一段不堪回首地Bug调试经历,程序员一听 ...

  4. 论 BUG调试与(程序猿)初学者

    作为一枚程序猿,BUG调试是最基本的技能,对于初学者更是重中之重.个人而言,要想为自己的程序猿生涯更上一层楼,就得知道什么是BUG调试,而且还必须知道怎么调好BUG.那么BUG究竟是什么呢?在我之前的 ...

  5. Bug调试(lldb)

    原文网址:http://www.cnblogs.com/Twisted-Fate/p/4760156.html 今天博主有一些Bug调试的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. X ...

  6. 记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver

    情况描述 前端输入框输入中文的横线 -- ,到后台接收时变成了 &madsh;$mdash 正常应该显示成这样: bug调试思路记录 最开始完全没有向调试源码方面想,试了不少方法,都没解决,没 ...

  7. 13 年的 Bug 调试经验总结

    在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可 ...

  8. <转载>linux下内存泄露查找、BUG调试

    先收藏着,抽空好好看看:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/ 简介 调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者 ...

  9. 13 年的 Bug 调试经验总结(来自蜗牛学院)

    在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug. 最近,我回顾了我所有的194个条目,看看有什么经验教训是我可以学习的.下面 ...

随机推荐

  1. 在ASP.NET中备份数据库以及还原(不成熟)

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. 一年半前端工作经验试水杭州:我是如何拿下网易、阿里和滴滴 offer 的

    前言 笔者毕业于东北大学,大学毕业社招进入环球网,前端开发工程师一职.技术栈:React+node,Github 地址 成果 来到杭州的目标非常的明确,大厂.其实就是网易.阿里和滴滴.好在基本三家都拿 ...

  3. go-爬段子

    爬取搞笑的段子,横向爬取+纵向爬取 横向爬取爬页数,纵向爬取,爬每页的内容 package main import ( "fmt" "io" "net ...

  4. ES6-扩展运算符和rest运算符

    es6-扩展运算符和rest运算符 扩展运算符:不确定他的参数个数时使用运算扩展符 // 声明一个方法 但不确定他的参数个数时使用对象运算扩展符 function ananiha(...arg){ c ...

  5. 升鲜宝V2.0_杭州生鲜配送行业,再论B端生鲜配送企业管理软件的开发与实施的难点与行业痛点_15382353715_余东升

    升鲜宝V2.0_杭州生鲜配送行业,再论B端生鲜配送企业管理软件的开发与实施的难点与行业痛点_15382353715_余东升 笔者简介:升鲜宝供应链管理软件平台创始人,14年软件从业经历,10多年深究生 ...

  6. 关于Java的多线程Runnable的个人理解(基础,不讲概念)

    背景说明: 在学了Java的多线程(继承Thread,Runnable)以后,我出于好奇,就想知道java到底是不是多线程的,不能它说自己是多线程就是多线程,自己想验证一下,于是我就想测试一下,但继承 ...

  7. Jupyter Notebooks 配置

    重装了三遍(破音) 一.首先进行Anaconda的下载 然后安装,将环境配置到系统变量上,如下 然后,打开 windows 的终端,检查是否配置成功 conda -V 然后就可以开始 Jupyter ...

  8. bay——linux6.5-PV-LV-VG扩容.txt

    [root@rac2 cdrom]# export LANG=en_US[root@rac2 cdrom]# lsblk[root@rac2 cdrom]# lvscan --- 查看系统PV LV ...

  9. Master Note for Transportable Tablespaces (TTS) -- Common Questions and Issues (Doc ID 1166564.1)

    APPLIES TO: Oracle Database Cloud Exadata Service - Version N/A and laterOracle Database Cloud Servi ...

  10. 3-3 用户管理-新建用户useradd和passwd

    3.用户管理 终端命令 提示:创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行 3.1创建用户/修改密码/删除用户 序号 命令 作用 说明 01 useradd -m -g 组 新 ...