- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC中用于调试程序的宏
ASSERT()
???? ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在 Release 版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏 VERIFY(),以保证表达式中的函数调用在 Release 版本中会被正确求值。
断言(assertion)用带断言信息(程序, 模块, assertion行)的对话框执行. 对话框有3个按钮: Break, Repeat (Debug), and Continue (Ignore). Break 结束程序, Continue 忽略断言, 最有用的是Repeat按钮. 按下它在断言的地方打开源代码编辑器. 在这里你可以测试所有的变量值并明白哪里出了问题。
例如:ASSERT(pPointer);ASSERT(n0 n100);ASSERT(0);
ASSERT在执行简单验证时很有用,但对于C++对象,特别是由CObject派生的对象,则有更好的方法ASSERT_VALID来实现类似操作。作为一般规则,我们应在开始使用每一个对象之前检查数据讹误,
ASSERT_VALID宏使得对CObject的派生类实现该操作非常简单。
例如:ASSERT_VALID(this);ASSERT_VALID(pView);
VERIFY()
??? VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效(译者注:原作者在这里没有讲清楚,VERIFY()不会打印说明,只是会对参数表达式求值)。
TRACE()
?????TRACE()基本上就是函数 printf()的一个复制品,唯一的区别是它把结果输出到调试窗口。在 Release 版本中,它也是无效的。一般是用TRACE0(),TRACE1(),TRACE2()…而不用TRACE()。
?这三个宏在? Release 版本中都不会产生任何实质性的影响,它们是否起作用取决于是否定义了预定义了宏 _DEBUG。这是对 Microsoft Visual C++ 而言,在其它的编译器中可能其它不同的宏。
常用用法:
为了控制传进的指针:
void SomeFun(SomeType* pPointer)
{
??ASSERT(pPointer);
?//some instructions.
}
你可以在switch 和 if操作中捕获奇怪的值例如:
switch(nRGBColors){? case nRed:?? {//some instructions.} break;? case nGreen: {//some instructions.} break;? case nBlue:? {//some instructions.} break;? default: ASSERT(0);??? // we should have never come here!}
if(nWaterTemp =0 nWaterTemp 50){? //some instructions.}else if(nWaterTemp = 50 nWaterTemp = 100){? //some instructions.}else{? ASSERT(0);??? // we should have never come here!}
对值的断言: ASSERT(nSomeValue = MinValue and nSomeValue = MaxValue);ASSERT(nOtherValue != 0);
?
可爱的 ASSERT 错误ASSERT( m_MyWnd.Create() );
呕! 这是一个可怕的错误! 程序在调试版中正常工作, 在发行版中不工作. 记住: 这是一个在发行版中将被移除的宏. 以这种方法你的窗口将永远不会被创建. 如果你用 MFC, 这样做:
VERIFY( m_MyWnd.Create() );
它在调试版中像ASSERT一样并且在发行版中执行m_MyWnd.Create()。
1)指向常量的指针变量?指针本身的内容可改变,但不会通过该指针改变所指向的内容。例如: const int MAX=3; const int * iPointer = MAX; iPointer = new int; 是合法的。 *iPointer=2;//非法 *iPointer += 3;//非法,它不可以改变指针所指向的内容。 应该明确,指向常量的指针是可以指向变量的。下
您可能关注的文档
- 南京市栖霞区2011年中考二模古诗文默写指定内容.doc
- 南宁市中考满分作文-安全技术说明书.doc
- 南平市中考满分作文-七年级英语下学期期末考试试题.doc
- 南通连云港2013届高三第三次调研测试语文试卷.doc
- 南通2013年3月二调(20).doc
- 南溪五中高2008级一诊考试语文模拟试题答卷.doc
- 宁德八中2013-2014学年第二学期八年级第五单元试卷.doc
- 宁国市黄冈实验学校2010~2011学年度第二学期三月份月考.doc
- 宁夏教师招聘考试中学语文必背诗篇(二).doc
- 牛津小学英语6A第三单元练习.doc
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
最近下载
- 中央八项规定精神解读优秀.pptx VIP
- 食品质量安全监督抽检与风险防控.pptx VIP
- 图解给谢依特小学戍边支教西部计划志愿者服务队队员回信精神.ppt
- GB 50423-2013油气输送管道穿越工程设计规范.doc
- 教科版六年级科学下册《变化中伴随的现象》PPT课件.pptx VIP
- 武汉市2025届高中毕业生四月调研考试(四调)数学试卷(含答案详解).pdf
- 2025年新高考卷仿真模拟卷语文试题含参考答案解析 .pdf VIP
- 2024河南对口高考计算机类真题.pdf
- 2023年广东省中考语文真题(含详解).doc VIP
- 关于技术经济学的研究动态与进展(4000字).docx VIP
文档评论(0)