在《编程珠玑》第五章里面,有句话:“专业的调试人员永远不会忘记,无论系统的行为咋看起来有多么神秘莫测,其背后总有合乎逻辑的解释”。
这里总结几点排查 技术问题 的思路
1,问题是否必现? 如果是必现的,那么解决问题就成功了90%. 如果不是必现的,努力去尝试复现问题.
2,定位问题的点(思路), 手段可以是
2.1 分析出错日志(找到不懂的关键词要google);
2.2 gdb调试core文件;bt 看下栈打印以及core信号;
2.3 添加打印法,这个方法看起来不那么高大尚,但是确是最简洁有力的一种调试方法。要知道在代码的那个部位打印那个变量,这个很关键。知道正确的打印位置,是对程序员系统熟悉程度以及软件基本功的有力考验。
2.4 经典的 排除法,例如 注释掉代码,或者 一个模块一个模块卸载;查看问题是否还出现。
2.5 基线对比法(鲁代码),选择一个不出问题的基线,和出问题的分支线,做改动对比。对比过程中,要有这个信念:90%的问题都是改动引发的 !
2.6 排除环境问题。开发过程中经常遇到: 我在这里运行可以,但是到哪里却不行了!的问题,从几个方面思考:软件版本一致吗?编译的操作系统内核版本一致吗?配置一致吗?
3,排查问题的风格
3.1 保持好奇心,以及解决问题的兴趣。
3.2 没思路要找人要思路,特别是之前开发过该系统的人。
3.3 及时汇报阶段进展,发在相应群里让大家知道。一是让leader知道,二是促进大家讨论。
4,休闲时间多看书
有时你会在书中偶然发现,你之前花了几天努力找到的答案,在书中已经有了。你会好奇为什么当时没有注意到书中的这段话。
Linux四库全书,《APUE》,《CS.APP》,《STL源码剖析》等等金典基础的书籍多看几遍。扎实的技术基础,能给你自由。