老司机找bug的心路历程

一.码畜:靠编译器帮自己查语法错误

消灭笔误:编写适合程序员的键盘练习

if (常量==变量或表达式)

使用goto接力超长的if,switch

连续的if还是if elseif

多个条件的组合:精心的排版

多重括号的匹配

条件编译

各种const:不要纠结各种常量了,这个世界上唯一不变的就是变化。用APIWriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

查看宏展开后的.i文件:VC编译选项加/EP /P(项目、属性、配置属性、C/C++、预处理器、预处理到文件:是,预处理取消显示行号:是),重新编译,查看宏展开后对应的.i文件。gcc加-E

偶遇到莫名其妙的编译错误都是用“每次用/*...*/或#if 0...#endif注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”的方法解决的。

附加包含路径、附加库路径、附加依赖库的设置。

 

二.码农:靠调试器帮自己查逻辑错误

for/while语句后多余的分号

while/do while语句在语义上的歧义

条件断点

消息断点

数据断点

__asm int3或DebugBreak()断点

在内存窗口中观察数据的原始字节形态

Call Stack:崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!

递归函数关注以下几个因素

·退出条件

·参数有哪些

·返回值是什么

·局部变量有哪些

·全局变量有哪些

·何时输出

·会不会导致堆栈溢出

语法糖越甜,编译调试查错越苦!

C++的隐藏调用:单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

任务管理器、VMMap、Process Monitor、Process Explorer、GDI泄露检测工具、……

三.码人:靠写日志帮自己查运营错误

CrashDump或Core的无力。

PDB的无力。

线上Debug的无力。

观察复杂数据的无力。

多线程调试的无力。

调试时序高度依赖代码的无力。

调试万年一遇非法数据的无力。

有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core或dmp文件、……这些方法都不行!

 

四.码神:靠冥想和顿悟帮自己查不可再现错误

假死的各种原因:

·控制循环的变量的取值范围有符号/无符号,==/<=

·控制循环的变量没变

·控制循环的变量被外部程序修改

·各种资源泄露

·死锁

·网速变慢或网络资源耗尽或网络时通时断

·权限、UAC、杀毒软件实时防护

·操作系统或软件自动升级

·以为系统时间不可逆

·以为系统时间相关变量不会溢出(GetTickCount()约49.7天就归0了!)

·……

不要企图优雅的结束(因为这是不可能办到的)

而要在烂的不能再烂的摊子上也能重整河山!

转自 http://blog.csdn.net/zhao4zhong1/article/details/53078924 侵删

时间: 2024-10-12 14:58:56

老司机找bug的心路历程的相关文章

老司机找bug的十年心路历程

一.码畜:靠编译器帮自己查语法错误 消灭笔误:编写适合程序员的键盘练习 if (常量==变量或表达式) 使用goto接力超长的if,switch 连续的if还是if elseif 多个条件的组合:精心的排版 多重括号的匹配 条件编译 各种const:不要纠结各种常量了,这个世界上唯一不变的就是变化.用APIWriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢! 查看宏展开后的.i文件:VC编译选项加/EP /P(项目.属性.配置属性.C/C++.预处理器.预处理到文

优云老王的心路历程(一):那个做了五年的产品经理

前言: 老王的五年产品经理心路历程,对拍脑袋式产品决策的反思,及如何建立产品用户体验监控体系. 我从2003年"误入"运维软件行业,并在2010年开始做产品经理,5年来,我始终和优秀的团队在一起,从零开始创造了ITSM.CMDB产品,并得到了很多用户的认可.但不怕大家笑话,这5年中,我内心其实无比的纠结.面对产品的历次迭代,一方面要做出对用户有价值的功能,要说服开发团队去落地:另一方面担心产品过于复杂用户不买账,而对功能的裁剪却不敢轻易动刀.例如产品是站为用户领导设计还是为真正的用户操

最近的心路历程非常之多

1.<老王和他的IT界朋友>能给我们带来什么 最近的心路历程非常之多,每次到了每年的这个时候,我总喜欢停下来,好好写写东西,感觉越来越力不从心.看到之前写的东西,总是很惊讶那样的文字也会出自我手. 最近姥爷有点身体不适,我推着他跑了跑医院,这才知道我们每个人其实都不是自己所想象的那样,并不是自己所想象的那样健康,我想做一个公众号,或者说一个订阅号,默默的记录我们身边的IT界人的心路历程,希望透过我们并不是很幼稚的文字记录自己的成长,同时给予其他看到这些文字的人 ,看到这些文字的攻城狮,程序员.

万字长文带你成为Python老司机

万字长文带你成为Python老司机 前言: 本文主要总结项目开发中和面试中的Python高级知识点,是进阶Python高级工程师必备要点. 主要内容: No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Python的代码和模块也都是对象. Python中函数和类可以赋值给一个变量 Python中函数和类可以存放到集合对象中 Python中函数和

酷课堂iOS交流群,聚集了一群热爱技术、有趣、有料,平均Q龄在10年以上的“老司机”,他们遍布在全国

新书即将上市: 这两天收到出版社的样书,预计这两周将陆续开始上架,感兴趣的小伙伴,到时可在天猫.当当.京东搜索"李发展"即可找到. ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本书内容简介和适合人群: 本书包含Swift 4.0语言.Cocoa Touch.视图控制器.控件.表格.网络.地图.音频.视频.动画.触摸.手势.故事板.CoreData.性能测试.机器学习.增强现实.加密解密等众多功能模块.这些内容是iOS开发必知必会的内容,需要读者重点掌握. 读者对象:通过对本

一个C#开发者重温C++的心路历程

前言 这是一篇C#开发重新学习C++的体验文章. 作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易注定是要被C++同事忽悠的. 我在和很多C++开发者沟通的时候,发现他们都有一个非常奇怪的特点,都很爱装X,都觉得自己技术很好,还很爱瞧不起人:但如果多交流,会发现更奇怪的问题,他们几乎都不懂代码设计,代码写的也都很烂. 所以,这次重温C++也是想了解下这种奇异现象的原因. C++重温 首先打开VisualStudi

关于代码效率提升的方法心路历程(购物车)

关于代码效率提升的方法心路历程(购物车) 给为园友们,大家好,最近一直解决执行提速,分析老代码的逻辑并提出优化方案,在这个过程中发现了很多不好的习惯,导致很多程序逻辑执行效率低下,现在将其总结一下,如果大家觉得有参考意义,就看一下,如果觉得有问题,多多指点,如果觉得写的不好,也勿喷,谢谢! 案例分析: 关于购物车效率的提升,在优化前,购物车需要3-5分钟才能够查询出来数据,并且购物所有商品全部刷新重新渲染.这个购物车计算价格的代码还是一个工作20年左右的前辈写的,并且找了很久的优化方案(只局限在

“老司机”教你如何处理PDF文件转换问题

大家常用的办公室文件格式有WORD.EXCEL.PPT.JPG.PDF等等,它们各有所长,像WORD方便文字的编辑和布局,EXCEL便于排序统计计算......而PDF的特点是美观但不易修改.在工作中我们经常会遇到需要将PDF文件与其它格式之间进行相互转化的情况.那么我们需要动手重新做吗?很显然,这是个吃力不讨好的且效率低下的选择,有经验的"老司机"这时会轻描淡写地说一声:"用转换器转一下就好." 现在市场上有很多这样的转换器,可大多数都不好用.国外的由于语言和操作

推荐系统老司机的十条经验(转)

作者:刑无刀链接:https://zhuanlan.zhihu.com/p/23847246来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一年一度的ACM Recsys会议在9月份已经胜利闭幕,留下一堆slides和tutorials等着我们去学习. 翻看今年的各种分享,其中老司机Xavier Amatriain的分享引起了我的兴趣:Lessons Learned from Building Real--Life Recommender Systems.主要分享