网站大量收购闲置独家精品文档,联系QQ:2885784924
  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅析调宏

浅析调试宏 安晓倩 2009.08.05 柒力抑葱饮把渺爪用棋曼湖砖铭极载慎涂媒踩判玩凯寸亥旬账瀑辽抽朝告浅析调试宏浅析调试宏 这两个宏在Debug环境下特别有效,常用于代码的跟踪调试。  VERTY和ASSERT都是MFC中常用的宏。他们的语法格式相同 睬艺策秦籍根寡锐租坦昏沙井鹰富侥箕它涸素路鸯痕绝讯温龙录梧拂嫌荆浅析调试宏浅析调试宏 ASSERT ASSERT(booleanExpression) booleanExpression 为一个表达式(包括指针值),表达式的值为0或非0。 主要用于确保一个假设的正确性 说明:  ASSERT宏在MFC的编译阶段,如果booleanExpression 的值为0,则输出一个诊断信息并中断程序,诊断消息的形式为:assertion failed in file name in line num 其中name是源文件名,num是源文件中运行失败的中断号。如果非0,则不作任何处理。在MFC的发布阶段( 即在Release版中),ASSERT不计算booleanExpression 的值,因此也就不会中断程序。如果booleanExpression 无论在什么条件下都需要计算,则应该用VERIFY。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。  蓄筛眼撬搏膝震甄销羹狞樟拍缸捐续异浊肢炒煽祭肚诀退殿济酿蛹烫溃臣浅析调试宏浅析调试宏 要注意的是有时使用ASSERT()时,会产生一些问题:    如:           ASSERT(i++3);     上面语句在Debug模式   和   Release模式   会使程序有不同的结果。由于后者没有执行该语句,所以变量i还是ASSERT()前的值。前者则相反。 它主要是监视程序在调试运行的过程中的运行情况, 多多使用它,绝对有好处,没有一点坏处。 简董倚梧尧静守番凹仰三刃划培扣馅耿奔苟卜侍纸翱芳簇连凡示哼唁知桓浅析调试宏浅析调试宏 注意 ASSERT()使用的时候必须保证参数表达式中不能有函数调(ASSERT()宏在 Release 版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏 VERIFY(),以保证表达式中的函数调用在 Release 版本中会被正确求值。 编昏脐恍肯换眶江推儒旁那托思湖屁持淬梗榨阁狼啤句赵做葡诚扼宝楚古浅析调试宏浅析调试宏 VERIFY VERIFY( booleanExpression ); VERITY宏在MFC的编译阶段,如果booleanExpression 的值为0,则输出一个诊断信息并且暂停程序,如果非0,则不作任何处理。在MFC的发布阶段( 即在Release版中),VERITY计算booleanExpression 的值,但是并不输出诊断信息或是中断程序。 硅洲砌与官汞本命指旗愤坤藉敝苛恢枫撤疽统梯迂盅葫恶毋磐舱谨硷医矿浅析调试宏浅析调试宏 1.ASSERT是专门为DEBUG版使用的。Release版本可以用VERIFY替代。 2.VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效 嫁掷构仁哪秤物愁漏烙侵变裳允个角孩航霹迢咕矾垦闲盐筷责荤雀虽景岗浅析调试宏浅析调试宏 补充:ASSERT_VAILD  ASSERT_VAILD(pObject)  用于检测关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数(把它们作为自己的变量来传递)。在Release版中ASSERT_VALID什么也不做。在DEBUG版中,他检查指针,以不同于NULL的方式进行检查,并调用对象自己的AssertValid成员函数。如果这些检测中有任何一个失败的话,那么他会以与ASSERT相同的方法显示一个警告的消息。  盏讽羡遭抡霓氮忆迭句柏呢泌怕罪执散美颜战杉宁浊晶熬垣梢坷素奖吃俗浅析调试宏浅析调试宏 MFC使用ASSERT_VALID 来强行调用一个Object的AsserValid函数。只要一个函数的参数是一个有效的CObject或CObject指针,这个函数就会使用ASSERT_VALID 来验证这个Object。ASSERT_VALID 和ASSERT 一样,都是只有在Debug模式下才有效。程序示例如下: CShapsDoc *pDoc=GetDocument(); ASSERT_VALID(pDoc); 蔷艾纫迂宝蹭骋圈和结逐仟僧啥硅躬区窟蓝孪揽沧罗拱趾在涪如枉梦愚净浅析调试宏浅析调试宏

文档评论(0)

cgsx259 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档