程序员请不要忽视调试技术
程序员请不要忽视调试技术
想写这篇文章已经很久了,但是一直不知道如何开始,因为调试技术这个东西本身不像编程语言,C++/C#这种简单的东西,大家想做些什么,查查类库,查查msdn,写出一些功能,皆大欢喜。
调试技术本身就很枯燥,如果没有一定定力的兄弟,看看可能就觉得犯困,没劲,没成就感。但是想想程序员,每天写代码一小时,可能调试的时间至少也需要一小时,当然,写到这可能你不同意,觉得你自己不是这样的,你不需要调试,对,我说的只是一般情况,不排除有高手,口水战也没社么意思,直接忽略这种情况。
不知道为什么,国内研究调试技术的人不是很多,可能大家都觉得这些基础的东西没意思,大家都在研究云计算,研究设计架构模式吧,我等无法企及的高度。呵呵,不扯了,开始重点的:
据我所知,在软件开发过程中有些及其重要的环节都需要调试技术,而且国外对这方面研究的也很多,我也不想说谁浮躁,但是这些基础的技术确实值得我们研究。
举个例子:
你公司开发的产品,在客户那边crash了,客户的环境不允许你访问,客户不知道问题是怎么发生的,他说他喝了杯茶,回来就发现问题的。
你想,你妹的,你还拉屎呢?
其实这个时候就需要调试技术了,怨天尤人是没有用处的,最好的方式就是分析日志,查看.dump文件,但是你能看得懂么?学学调试技术吧,学学反汇编吧,其实这些东西都是作为程序员的基本功,别告诉我你会云计算,在这个时候,对客户一点用都没有。
下面说说主流的调试技术:
由于调试技术比较接近系统底层,所有他和系统的架构,比如X86, ARM,有紧密的关系,常见的架构是X86,而且和OS相关,常见的OS是linux和windows。
windows 平台的调试工具比较多,高手用windbg比较多。
linux不用说,用GDB的比较多。
写几个demo考考大家的调试水平:
When you are using recursive definitions of this type, each alias is translated as soon as it is used.
For example, the following example displays 3, not 7.
0:000> r $.u2=2
0:000> r $.u1=1+$u2
0:000> r $.u2=6
0:000> ? $u1
Evaluate expression: 3 = 00000003
Similarly, the following example displays 3, not 7.
0:000> as fred 2
0:000> r $.u1= 1 + fred
0:000> as fred 6
0:000> ? $u1
Evaluate expression: 3 = 00000003
The following example is also permitted and displays 9.
0:000> r $.u0=2
0:000> r $.u0=7+$u0
0:000> ? $u0
Evaluate expression: 9 = 00000009
总结
我写这篇文章的意图是想说明,作为程序员,除了必要的算法,语言,系统,必要的调试技术也是基本功,而这项基本功在国内没有引起足够的重视,希望你可以看到我这篇文章。