程序员新人怎样在复杂代码中找 bug?

分享下我的debug的经验

1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间。

2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经验的同事问一下思路,因为在那种开发多年的大型系统里,经常会反复出现同样原因的bug,原因都类似,改了一处,过一阵子另外一处又冒出来,而且无法根治。比如:我那个系统里有个特别危险的API,接口参数比较难用,一旦有人用错了某些情况下就会出诡异的现象,解决很简单,找到调用这个API的地方把调用方式写对就好了。为什么不根治呢?因为要保持兼容性不能改接口了。Windows系统里就好多这种烂API。问下老员工吧,说不定他们都遇到过好多次了。

3. 放大现象,有些bug现象不太明显,那么就想办法增大它的破坏性,把现象放大。这只是个思路,具体怎么放大只能根据具体的代码来定。比如:美剧《豪斯医生》里有一集,怀疑病人心肺有问题,就让病人去跑步机上跑步,加重心肺负担,从而放大症状。
4. 二分法定位,把程序逻辑一点点注释掉,看看还会不会出问题,类似二分查找的方法,逐步缩小问题范围。
5. 模拟现场,有时候我会问自己,如果我要实现bug描述的现象我要怎么写代码才行?
比如:我遇到一个死锁问题,但是检查代码发现所有的锁都是配对的,没有忘记解锁的地方,而且锁很简单就是一个普通的临界段,几行赋值语句而已。这样的代码怎么写才能让他死锁呢?我想如果让我故意制造这样一个现象,只有在上锁的时候强制杀掉线程了。
既然这样就可以去看看有谁强杀线程了没有。

6. 制作工具,针对某些bug编写一些调试辅助工具。比如,我那个系统没有完善的崩溃报告,虽然也有dump,但是分析出来的callstack经常不准。于是我为解决崩溃问题编写了个工具,会自动扫描代码,在每个函数入口和出口插入log,以此来定位崩溃点。

7. 掩盖问题,虽然这样做有点不厚道,但是有时不得不这么做。有些bug找不到真正的root cause,但是又要在规定时间内解决,那么我们就可以治疗症状而不去找病因。比如用try catch掩盖一些奇怪的崩溃。不到万不得已不要这么干,未来可能会付出更大代价。

时间: 2024-10-14 11:39:18

程序员新人怎样在复杂代码中找 bug?的相关文章

程序员怎样在复杂代码中找 bug?(简单)

分享下我的debug的经验 1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间. 2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经验的同事问一下思路,因为在那种开发多年的大型系统里,经常会反复出现同样原因的bug,原因都类似,改了一处,过一阵子另外一处又冒出来,而且无法根治.比如:我那个系统里有个特别危险的API,接口参数比较难用,一旦有人用错了某些情况下就会出诡异的现象,解决很简单,找到调用这个API的地方把调用方式写对就好

程序员不能只会敲代码还要会投资理财

程序员不能只会敲代码,还要会理财或者说投资. 当我们步入职场,随着我们工作经验的增长我们的薪资相应的也会快速提高,很多人可能思维上还没有改变过来,不知道如何利用自己的闲钱去保值或者增值.当然现在互联网理财发展已经比较的成熟了,大多数的人也知道用自己发的工资直接购买余额宝来赚取利息,余额宝可以说是开启了国人理财的意识.对于我们普通人来说可以有以下几种投资: XX宝比如余额宝(货币基金),收益比银行活期存款或者某些定期存款还高,风险低几乎不会损失你的本金,但是一年的收益还是不能抵抗通货膨胀: 互联网

程序员,千万不要重写代码

如果你跳槽.或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动. 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来.是的,他们决不会满足于简单的增量劳动. 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟. 但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难. 为什么你觉得旧代码异常混乱?因为读

程序员级别鉴定书 ----会写代码级别

线程跟进程 一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中跟进程有区别 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 进程具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.

[转]为什么程序员总是写糟糕的代码?这3个原因

原文请看:为什么程序员总是写糟糕的代码?这3个原因 我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因. 1.明显原因…… 我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有的人技术水平高,有的人水平却低,有人对这门技艺感兴趣,但也有的人却不愿意在工作之外学习其他. 好了,我就不深入探讨了. 那么是不是在这表层之下还有更多的问题呢?有没有导致糟糕代码的根本性原因?我觉得有必要深入探究一下. 2.低预期…… 对于这一点,众所承认的是,我们在大学中,通过自学或书籍学到的东西

程序员 为什么千万不要重写代码

? 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来.是的,他们决不会满足于简单的增量劳动. 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟. 但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难. 为什么你觉得旧代码异常混乱?因为读代码更难 这大概就是代码Reuse难以实现的原因,也可以解释为什么你组里的每个人都喜欢用不

程序员要双管齐下写好代码和写好文档

有一个问题就是程序员为什么不喜欢写文档,这个问题是一直存在的,不管怎么说,文档绝对是程序员最大的软肋.一些被称之为高手的程序员,往往是文档方面的低能儿.不管这个程序员是在大公司.还在小公司.不管程序是写文档的.还是不写文档的,大部分程序员在内心深处中是不愿意写文档的.  天下的怪事特别多,有时让人不能理解.程序员一般不愿意写文档,但是程序员却喜欢看别人的文档.即使写了文档,程序员一般不会把所有功能都写入文档,却抱怨别人文档有的功能没有说明.即使写了某段文档,程序员一般不不想把文档写的很详细,却抱

前大疆程序员离职后,把代码上传 GitHub,令公司损失百万,获刑半年!

该员工之前在大疆的子公司担任软件工程师,公司对他很器重,负责编写农业无人机的管理平台和农机喷洒系统代码.他在Github 开设账号,并建立了"公有仓库",把代码上传至了 GitHub 公有仓库. 经鉴定,大疆这些泄露出去的代码具有非公知性,且已用于该公司农业无人机产品,属于商业秘密.经评估,这次泄漏公司造成经济损失116.4万元人民币. 案发后,这位员工第一时间删除了相关代码,并积极配合调查,防止事态扩大.他在推特上表示,"无意泄露了大疆的机密"."我很后

好程序员web前端教程分享js中的模块化一

好程序员web前端教程分享js中的模块化一:我们知道最常见的模块化方案有CommonJS.AMD.CMD.ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的,所以有时候导致依赖还没加载完毕,同步的代码运行结束:CommonJS规范一般用于服务端,同步的,因为在服务器端所有文件都存储在本地的硬盘上,传输速率快而且稳定. 1.script标签引入 最开始的时候,多个script标签引入js文件.但是,这种弊端也很明显,很多个js文件合并起来,也是相当于一个script,