- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vs2008上debug和release的区别
vs2008上debug和release的区别 出现****.exe has break pointer.他们有什么区别呢?outputdebugString是什么呢?VS2008 Debug与Release的本质区别对于VS2008的初次使用者来说,常会遇到的编译问题时,Debug版本运行正常,但在Release版本则不稳定或无法运行。以下是对Debug版本与Release版本本质区别的分析:原文地址Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本:/MDd /MLd或 /MTd使用 Debug runtime library(调试版本的运行时刻函数库)/Od 关闭优化开关/D _DEBUG 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译/GZ 可以帮助捕获内存错误/Gm打开最小化重链接开关,减少链接时间Release 版本:/MD /ML 或 /MT 使用发布版本的运行时刻函数库/O1 或 /O2 优化开关,使程序最小或最快 /D NDEBUG 关闭条件编译调试代码开关(即不编译assert函数)/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。二、哪些情况下 Release 版会出错有了上面的介绍,我们再来逐个对照这些选项看看 Release 版错误是怎样产生的1. Runtime Library:链接哪种运行时刻函数库通常只对程序的性能产生影响。调试版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的 Runtime Library 通常很稳定,不会造成 Release 版错误;倒是由于 Debug 的 Runtime Library 加强了对错误的检测,如堆内存分配,有时会出现 Debug 有错但 Release 正常的现象。应当指出的是,如果 Debug 有错,即使 Release 正常,程序肯定是有 Bug 的,只不过可能是 Release 版的某次运行没有表现出来而已。2. 优化:这是造成错误的主要原因,因为关闭优化时源程序基本上是直接翻译的,而打开优化后编译器会作出一系列假设。这类错误主要有以下几种:(1) 帧指针(Frame Pointer)省略(简称 FPO ):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误————但 Debug 方式下,栈的访问通过 EBP 寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;Release 方式下,优化会省略 EBP 栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。你可以在 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。此类错误通常有:● MFC 消息响应函数书写错误。正确的应为afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam); ON_MESSAGE 宏包含强制类型转换。防止这种错误的方法之一是重定义 ON_MESSAGE 宏,把下列代码加到stdafx.h中(在#include afxwin.h之后),函数原形错误时编译会报错#undef ON_MESSAGE #define ON_MESSAGE(message, memberFxn) \ { message, 0, 0, 0, AfxSig_lwl, \ (AFX_PMSG)(AFX_PMSGW)(static_cast LRESULT (AFX_MSG_CALL \ CWnd::*)(WPARAM, LPARAM) (memberFxn) }, (2) volatile
您可能关注的文档
- TSQA75—02—01设备管理标准.doc
- TPM在工业工程中的应用.docx
- ucos-ii操作系统复习大纲.doc
- Testit10电路板故障诊断仪.doc
- Unit4MyHomeALet’slearn教学设计20111121.doc
- Unit_5单元知识总结.doc
- UNIX文本编辑器教程.doc
- vi编辑器是所有Unix及Linux系统下标准的编辑器.doc
- VOA中速英语2.doc
- vr渲染基础知识.doc
- 中国国家标准 GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南.pdf
- 《GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南》.pdf
- 中国国家标准 GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 中国国家标准 GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件.pdf
- 中国国家标准 GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 《GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件》.pdf
- 《GB/Z 44938.1-2024机械电气安全 第1部分:用于保护人员安全的传感器》.pdf
- 中国国家标准 GB/T 21551.3-2024家用和类似用途电器的抗菌、除菌、净化功能 第3部分:空气净化器的特殊要求.pdf
最近下载
- 2024-2030年中国电热水壶市场运行动态分析与营销策略研究报告.docx
- 2025《中国的大学介绍》讲座课件.pptx
- 2024-2030年中国电热水壶市场运行动态分析与营销策略研究报告.docx
- 2023湖南单招语文练习题.docx VIP
- 四库全书基本概念系列文库:襄阳县志.pdf VIP
- ISO15189质量管理体系范本文件-医院检验科程序文件 收藏版.doc
- JJF(闽) 1125-2022 土工布测厚仪校准规范.docx
- 高中化学思维导图_海水资源的开发利用.pdf VIP
- 河南省2024年中考数学试卷(含答案).docx VIP
- 人教版数学四年级下册第2单元综合检测卷(含答案).doc VIP
文档评论(0)