跟踪错误有用的编译选项:
/W4 用最高的警告层次编译(所有版本均使用)
/D “_DEBUG” 打开条件编译调试开关,即定义了 _DEBUG(仅调试版使用)
/GZ 检查包括未被初始化的自动(局部)变量、堆栈错误、不正确的函数原型
(仅调试版使用)
/Od 关闭优化开关,使得代码更易读懂(仅调试版使用)
/GF 消除重复的字符串,并将字符串放到只读内存中,避免它们被错误地修改。
当/ZI选项打开时,该选项被自动打开(仅在发布版使用)
/ZI 用调试符号和编辑继续信息创建程序数据库,从而减少调试周期的时间和
所花费精力(仅在调试版中使用)
/Zi 创建调试符号的程序数据库(仅在发布版使用)
调试错误有用的链接选项:
/MAP:”Debug/ProgramName.map” 创建一个映射文件
/MAPINFO:LINES 在映射文件中添加行号信息
针对调试版本的编译选项:
/MDd,/MLd,/MTd 使用调试版本的运行时刻函数库
/Od
/D “_DEBUG”
/ZI
/GZ
/GM 打开最小化重新链接开关,减少链接时间
针对发布版本的编译选项:
/MD,/ML,/MT 使用发布版本的运行时刻函数库
/O1或/O2 打开优化开关,使得程序会最小或速度最快
/D “NDEBUG” 关闭条件编译调试代码开关
/GF
你可以选择任何一组选择,所以你可以有一个带调试符号、跟踪语句、断言语句的
发布版本,只要你选择了这些选项。
调试版本和发布版本的运行时刻函数库的区别:
调试版本的运行时刻函数库有以下几个特性:
l 其对内存分配作了跟踪
l 在刚分配的内存里写上0xCC,有助于发现使用未被初始化数据的错误
l 在被释放的内存里写上0xCD
l 在缓冲区的两边分配了四字节的保护数据,并用0xFD作初始化,来检查写内存
的上溢出和下溢出。
变量优化:
优化会去掉不必要的变量以及重复使用的变量,可能会优化而保存在寄存器中。
这可能会隐藏错误,特别在多线程中。volatile关键字告诉编译器不能对该变量优化。事
实上调试版本中的所有变量都是volatile的。
内联函数
VC在调试版中默认关掉内联,具体地说,内联是被/Ob0编译选项关掉的。对于发布版,
内联能被/O1(大小最小)、/O2(速度最小)、/Ox(完全优化)打开。