突然想写个关于 debug 的文章,来纪念我2天前被自己坑的蠢事……

  前两天,项目的四期送去电科院审查了。因为一些不可描述的原因,我很不喜欢四期。做起来就很烦~临近验收,发现了个比较严重的bug,记录里有 附件 的记录保存后再查看都会导致记录无法查看。下午我在那边找了2小时,也没定位到问题具体在哪边。最后只想着要把附件这个属性隐藏掉,不给别人选了。后来晚上去吃个饭,回来扫了眼控制台,突然发现了问题所在。原来附件里 .xxx 的小数点被过滤器给拦截了。于是很快就改好了问题,然而却要等待升级,然后就通宵了,遭了波重。

  想起培训时,看起来有点虚胖,脸色有点苍白,永远很乐观的讲师会一再的和我们强调,debug 能力将会是伴随程序员整个职业生涯的法宝。到了项目里就是干活的,没人会给你安上 “新人”的角色,什么新人不新人的都是你们自己以为的。到时陌生的框架与业务逻辑要怎么看?全靠 debug。

  记得培训时,MVC之间的逻辑,从前台走到后台,对于初次接触的人来说简直难到飞起来了。听了2天课也不是很懂。于是周末在家 debug,看数据在内存走来走去了2天。再去上课,突然就感觉自己懂了不少。debug 代码的过程,就好比抄书一样,并不是不 debug 时就看不懂代码了。而是 debug 时人会更专注的去看代码,不知不觉之间就会理解代码的意思。

  那时,我以为我懂debug了,不就是三个层嘛,不是这层出错了就是那层出错了,太简单了!

  然而那时写的项目是在太简单了,简单到起个服务,我那电脑最多几十秒就起来了。然而进了项目,仅我们组我负责的模块,起个项目就至少10来分钟了。量一大了,就突然间不会 debug 了,感觉自己像个无头苍蝇一般。

  那时,我debug时不喜欢进 debug 窗口,项目经理常常喷我,诶,你不进这个窗口你怎么看呀?什么什么的……那时我说,进了这个窗口,代码的窗口太小了,看得不爽。

  然而现在我也爱上了debug视图。很有用,下方控制台会打印信息,左边的视图可以清楚的看到变量在每一行有什么变动的视图,上面可以控制断点……

  我的同事,和我一样也是培训班出生。可能这就是蛇鼠一窝?然而他们的只有3个半月,说是老师上课根本没教过 debug 怎么用,java就用syso,前台就用alert 来打断点……想想还是有点坑的,不过他们的机构也是能把自己的学员都硬给推走,给个入门的渠道,也算是,还剩点良心吧!

  培训时没有学过debug的结果就是,把那会欠下的学习加班补回来。其中一人在学校时就自学过,培训时也是他们班学的挺好的,适应起来还好。另一人就惨了,本来就不怎么会,只能硬着头皮学……

  公司是以赚钱为目标的,资本是压榨每个最大的劳动力。每个人都会很忙,没有人有太多空闲的时间去教你怎么用一个东西的。顶多授之以鱼,帮你一时,而这也是种情分。若是别人不帮你呢?也没什么怨言。

  我来时,正是项目最后一个老员工待的最后一周,他把版本交接给了我对面那人。然而却是我和另一人一人一半接过整个项目。业务什么都不懂,技术吧,学的就那样。6个月,顶多是能干活。那能怎么办呢~公司雇人来就是解决问题的。

  就 debug 一点一点理解业务逻辑。刚来的第一个版本,问题狂报,我们组还上了个安全代码。前台加密后台解密,搞得好多地方漏加密或是多解密。模块摊掉了就。没办法,只能硬解决,一步一步跟着代码走,看看变量传到后台时是什么样的,发现是加密后的,然后在后台加一层解密。有时被加了两层密,就搜前台……

  之后,现场的电话也给我打起来了,长这么大,第一次被人叫 X工 的称呼。工人吗……其实确实和上世纪纺织厂的工人没什么区别。只是多了点改变世界的妄想,可能看那句叫 “write code,change world” 的标语看多了,产生错觉了吧!

  有段时间,很怕手机响起。因为一响就意味着现场报问题了。一直都怕打电话,感觉打起电话说话很尴尬。这几个月下来已经不怕了。

  再过段时间,开始试着解决现场报过来的问题。让他们把日志发过来,我就看……发现其实和控制台报的信息一模一样。记得有个问题看了,当时看了没看出什么名堂来。因为是只有一个现场报这个问题,不是很紧急。10多天后改另一个问题时断点经过那边,突然发现了其中的玄机。和现场实施配合解决了,真的让人很开心。问题是这样的,只有他们现场的环境的字段输入数字时,不自动补3个0,其他现场都会补。然后我们这边的 “设计”说,他们现场有问题,就他们经常会报一些稀奇古怪的问题出来~上一任开发都被他们现场烦死得了~

  结果是因为配置页面与我们这边有差异引起来的差错,现场实施说,困扰现场许久的问题解决了,谢谢!

  是的,在我看来很小的问题,在现场会被许多用户用到的。改善一点点,对于经常使用那边功能的用户来说都是很大的改变了。软件变好,网页使用方便是会被用户感受到的,就像微信,版本更新会引发大量推文与分析。

  本想写个纯 debug技术 的文章的,想想我也没用很久,就结合自己经历带着写了点。总的来说,我认为 debug 就是排查错误的能力中的一部分,它是必要组成部分,却不是全部。来了问题,首先是要冷静,不能烦躁,烦躁起来会遗漏掉一些看似不起眼的信息。就像我前两天,没第一时间看控制台,在那急躁了起来。最后就很坑。

  来了问题,先分析问题产生的原因,是脏数据或异常操作?不同环境之间的差异,先排查自己能确定的部分如配置信息或代码里有没有加开关之类的,最后再去怀疑现场服务问题。事实上,现场服务起的往往没错。找bug时,先看控制台,再看网页上的报错,往往报错信息就告诉自己该怎么做了。想法设法的进断点,进了断点,问题就不是问题了。只是进断点之前的前置条件需要许久时间。

  用的多了,自然就会了。想想还是感谢那时培训时,讲师跟我们讲了很多debug的技巧,不然前段时间才进公司的这段日子,会更难熬过来吧!

  

  

debug,菜鸟必备的求生技能的更多相关文章

  1. centos7系统管理和运维实战——运维必备的网络管理技能(1)

    运维必备的网络管理技能 一.网络管理协议: 1.简单的两个概念:    DHCP(动态主机配置协议):如果网络结构要更改,需要从新初始化网络参数,手机用动态主机配置协议可以避免这个问题.客户端可以从D ...

  2. 「编程羽录」上线,程序员必备的这些技能你能get到嘛?

    大家好,我是小羽. 好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章. 会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全 ...

  3. 现代Web应用开发者必备的六大技能

    过去,应用开发需要注重大量的专业知识,程序员只需关注单一的语言(比如COBOL.RPG.C++等),并利用该语言创建应用.而如今,时代在变迁.Web不再是单单关注独立的一面.相反,一个现代化的Web应 ...

  4. DevOps 工程师成长日记系列一:必备知识与技能组合

    原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-366097df7737 ...

  5. 刚接触Linux,菜鸟必备的小知识点(一)

    身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...

  6. 菜鸟必备教程,ajax与xml交互传输数据。

    今天,公司让学习ajax,然而我并不会,着急到爆炸,boom~~啥卡拉咔.看着教程一步一步摸索,写出来交互页面,写代码真的好惆怅啊. 额,不说废话,下面是源代码. 首先是ajax的代码,注释真的很重要 ...

  7. 超赞!UX写手必备技能

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 今天,小编非常荣幸能与大家一起分享一些优秀UX 写手必备的成功技能: 1.开篇抓住用户的心 MBE曾 ...

  8. Java架构师必备技能:docker使用大全

    前言   java工程师成长为架构师是一个艰难且耗费心力的过程,不仅仅需要熟悉java体系内相关的技术,同时要掌握许多运维相关的操作技能,随着k8s逐渐成为微服务持续集成开发难以越过的基础设施之后,d ...

  9. 实训随笔2:Git Gui——拯救菜鸟的工具

    熟练使用git进行多人协作开发,是程序猿必备的专业技能之一,可惜我等实在太菜搞不来复杂的命令行. 幸好除了Git Bash还有一个Git gui存在——专门为了拯救我们这些菜鸡程序猿而存在的工具. 下 ...

随机推荐

  1. Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]

    http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a mat ...

  2. 京东返利渠道,自己拿返利,无需A推B操作

    京东返利渠道,自己拿返利,无需A推B操作,简单快捷方便 1.在微信小程序中搜索 “京东饭粒” 2.进入京东饭粒,进购物车下单(只能在购物车内下单返利) 3.收货后26天返京豆到你的京东账号中,”佛系返 ...

  3. Spring复习

    第一天 IOC:控制反转,对象的创建权交给Spring DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来. 包括集合的注入 ClassPathXml ...

  4. 软件-集成开发环境:IDEA(Java 语言开发的集成环境)

    ylbtech-软件-集成开发环境:IDEA(Java 语言开发的集成环境) IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他开发语言),IntelliJ在业界 ...

  5. python网页爬虫开发之五-反爬

    1.头信息检查是否频繁相同 随机产生一个headers, #user_agent 集合 user_agent_list = [  'Mozilla/5.0 (Windows NT 6.1; WOW64 ...

  6. junit 基础使用

    junit百度百科: JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JU ...

  7. uva-10400-搜索

    题意:题意很简单,就是输入数字,对数字进行加减乘除,然后能不能得到最后的数字. wa了很多次,memcpy(dst,src,sizeof(dst))才对,最后一个参数写错,最后一个参数是要拷贝的字节数 ...

  8. python——vs2017安装python库时,提示pip指令问题。

    需要跟新pip指令 方法: 第一步:打开vs2017 后新建一个python 文件 后面如图 点击红色部分 2.在框中输入pip之后更新即可 如图 3.问题解决 倘若还有问题 欢迎分享

  9. leetcode279

    动态规划 public class Solution { public int NumSquares(int n) { var list = new List<int>(); list.A ...

  10. xml实现登录表单验证

    定义: XML(eXtended Markup Language,可扩展标记语言)提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML可以方便地实现数据交换.系统配置.内容管理等常见功能. ...