debug为调试版本,其中包括了出错时能够定位源代码的行,如果源文件已经改变,定位出来会有偏移,而且,在这个版本中编译器不会进行代码优化,并且在程序中能用宏定义_DEBUG来确定当前的版本。另一个为正式版本,程序出错只是进行简单的错误处理,编译器会优化代码,以提高性能。release代码更小,执行更快,编译更严格,更慢,当然就没有了调试信息。debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。
1.debug运行成功release版本运行失败的原因(可通过printf函数定位错误的位置)
(1)变量没被初始化就被引用
(2)数组越界
(3)项目的属性配置,例如配置属性->C/C++->预处理器定义,添加或缺少宏定义
(4)命令行参数长度太长
2.debug运行失败release版本运行成功的原因
(1)Runtime Library
(2)Assert断言指令,是属于调试代码,只能在debug模式下用,错误可能就是在这里。但是release版会把ASSERT宏优化掉,所以assert里的错误不会被发现。