现在的位置: 首页 > 综合 > 正文

Windows程序调试-学习笔记

2013年08月30日 ⁄ 综合 ⁄ 共 826字 ⁄ 字号 评论关闭

参考书目 《Windows程序调试》 Everett N. McKay   Mike Woodring著    何健辉 许俊娟 董伟  译

第2章 编写便于调试的C++代码

1、预处理的名字不在符号表里,所以不能用调试工具来检查预处理常量

2、malloc只分配内存,new除此之外,还会调用对象构造函数;free、delete对比亦然

3、C++输入输出流的任何问题都可以在编译时刻检测出来,而且输入输出可以重载在任何C++类中

4、把所有的共享定义、声明放在头文件里,不要在.cpp文件里看到extern关键字

5、/GZ编译选项,自动变量在调试的时候会被初始化

6、由于大多数构造函数都能把它们的对象初始化到一个良好定义的状态,通常不需要对对象初始化。例如CString strTemp;

7、float的最大误差为FLT_EPSILON宏定义,double的为DBL_EPSILON   两者均在float.h内定义

8、构造函数的虚函数并不像一般的虚函数,如果基类的构造函数调用了一个虚函数,调用的实际是虚函数的基类版本,而不是重载后的版本。否则,如果基类调用了派生类版本的虚函数,就会引起存取异常,因为此时还没有构造基类的数据成员。如果构造函数真的需要虚函数,就使用单独的初始化函数好了。

第3章 使用断言

1、断言失败的,一定不正确;但是断言成功的不一定正确。断言无法替代测试。

2、自定义断言,打log、StackWalk函数在创建的自定义断言宏的消息中显示调用栈(参考网上下载的callstacktest)

3、C运行时刻函数库和MFC断言宏显示一个断言失效的消息框,但这种默认的行为可以通过_CrtSetReportMode被改变,输出到消息框、输出窗口、文件或者任何这些选项的组合中

第4章 使用跟踪语句

1、visual C++输出窗口的缓冲区大小有限制,因此如果跟踪消息数据产生的速度超过了输出窗口处理的速度,那么缓冲区满了数据就会丢失。解决方法是在高峰区添加Sleep(100)类似的休眠代码

抱歉!评论已关闭.