第八章防御式编程(代码大全读后)
2016-11-22 09:19 卡斯撸代码 阅读(250) 评论(0) 编辑 收藏 举报目录
8.1保护程序免遭非法输入数据的破坏
8.2断言
8.3错误处理技术
8.4异常
8.5隔离程序,使之包容由错误造成的损害
8.6辅助调试的代码
8.7确定在产品代码中该保留多少防御式代码
8.8对防御式编程采取防御的姿态
一、保护程序免遭非法输入数据的破坏
1、检查所有来源于外部的数据的值
企图缓冲区溢出、注入sql 注入的html或者XML代码、整数溢出以及传递给系统调用的数据
2、检查子程序所有输入参数的值
来自于其他子程序
3、决定如何处理错误的输入数据
二、断言
1、建立自己的断言机制
C++实现自己的断言:
2、使用断言的指导建议
用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况
3、 避免把需要执行的代码放到断言中
4、用断言来注解并验证前条件和后条件
5、对于高健壮性的代码,应该先使用断言再处理错误
有时要断言和错误一起使用如word里面开发就是如此
三、错误处理技术
1、返回中立值
2、换用下一个正确的数据
3、返回与前次相同的数据
4、换用最接近的合法值
5、把警告信息记录到日志文件中
6、返回一个错误码
7、调用错误处理子程序或对象
8、当错误发生时显示出错消息
9、用最妥当的方式在局部处理错误
10、关闭程序
健壮性与正确性
高层次设计对错误处理方式的影响
四、异常
1、用异常通知程序的其他部分,发生了不可忽略的错误
2、只在真正例外的情况下才抛出异常
3、不能用异常来推卸责任
4、避免在构造函数和析构函数中抛出异常,除非你在同一地方把它们捕获
5、在恰当的抽象层次抛出异常
6、在异常消息中加入关于导致异常发生的全部信息
7、避免使用空catch语句;如果非得使用请写注释为什么可行
8、了解函数库可能抛出的异常
9、考虑创建一个集中的异常报告机制
10、把项目中对异常的使用标准化
11、考虑异常的替换方案
五、隔离程序使之包容由错误造成的损害
在输入数据时将其转换为恰当的类型
六、辅助调试的代码
1、 不要自动地把产品版的限制强加于开发版之上、
2、尽早引入辅助调试的代码
3、采用进攻式编程
4、计划移除调试辅助的代码:使用类似ant和make这样的版本控制工具和make工具、使用内置的预处理器
七、确定在产品代码中该保留多少防御式代码
1、保留那些检查重要错误的代码
2、去掉检查细微错误的代码
3、去掉可以导致程序硬性崩溃的代码
4、保留可以让程序稳妥地崩溃代码
5、为你的技术支持人员记录错误信息
6、确认留在代码中的错误消息是友好的
八、对防御式编程采取防御的姿态