1.如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
2. Release和Debug有什么不同
Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。
3. ASSERT和VERIFY有什么区别
ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。
例如ASSERT(file.Open(strFileName))。
一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。
DEBUG模式在代码中使用_DEBUG宏来开关只在调试中出现的代码方便调试,像如果有内存跟踪机制的话,一般会重载new和delete在分配的每块内存中加入额外的文件号和行号信息来检测内存泄漏,而Release则跟普通的new和delete没有任何区别,除非特别必要,最好尽量少使用这种#ifdef #endif这种宏开关,以避免不同版本之间的行为不一致而难以调试。到了楼主所说需要调试Release的时候已经说明出现Debug版与Release行为不一致的现象,并且很有可能是程序员写出的代码导致的原因,为了避免这种情况,除了上面所讲的方法外,项目应该有良好的测试环境,在每一功能模块完成时对Release版本进行测试,保证现在新功能单元测试通过的同时原有单元测试模块都能通过,通不过时程序员最高优先级的任务就是用版本控制器回到上次版本找出原因,可惜国内环境很少有公司有心思完全做好这些...可能这些细节就是形成差距的原因...
来源:http://bbs.gameres.com/showthread.asp?threadid=100350