由于第三章主要介绍一些工具,我直接跳过某些章节,从调试开始。
tip18:调试--没有人能够写出完美的软件,所以调试要占用我们大量的时间。在我们开始调试之前,选择适当的思维方式非常重要,
调试的第一准则是不要恐慌。
调试时要小心近视,要抵制只修正我们所看到的bug的急切愿望,事实上那个bug的源头可能还在远处,还影响了其它我们还未发现的模块,我们应该设法找到问题的根源,再去进行解决,而不仅仅只是问题的特定表现。记住,在我们看到了马蹄印,要想到马,而不是斑马。
tip21:按合约设计(DBC)-- 软件系统中的每一个函数和方法都会做某件事情,此时会有一些期望和陈述:
1.前条件(precondition):为了调用函数,必须为真的条件,即参数必须有效,这个是调用者的责任。
2.后条件(postcondition):函数保证会做的事情,函数完成时的状态,保证会结束,不允许有无线循环。
3.类不变项(class invariant):类保证从调用者的角度来看,该条件总是为真。且在执行过程中,该不变项一定会保持,直到退出。
实现dbc,在设计时,简单的列举输入域的范围,边界条件是什么,这是向着更好的软件的一次飞跃,这是一种设计技术。在设计一个软件时,我们应该设计属于它的合约。
tip22:死程序不说谎--尽早检测问题的好处之一是我们可以尽早崩溃,这样我们可以获得错误信息,死程序带来的危害通常比有疾患的程序带来的危害要小得多。
tip23:断言式编程--用断言来确保不会发生的事情。不会把必须要执行的代码放在断言之中,也不能用断言来代替真正的错误处理。
tip24:何时使用异常--将异常用于异常的问题,出现错误是否还能运行可以做为是否使用异常处理的判断。
tip25:怎样配平资源--要有始有终,打开的资源要关闭。 有open就一定要有close操作,有malloc就一定要有free操作。