浅析调试宏.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析调试宏.ppt

浅析调试宏 安晓倩 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)

docindoc + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档