友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第99章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!





    (10) CUserException  



一个CUserException对象表示停止终端用户操作时抛出的异常。  



MFC中的AfxThrowUserException 函数抛出一个CUserException类 

型的异常,使用如下形式:  



void AfxThrowUserException( );  



                     第三节 诊断服务  



上节讲述了使用异常处理来捕获程序中的错误,然而并非程序中所有 

的错误都是可以捕获的,还会出现很多无法预知的错误,这些错误需 

要在调试程序中发现并更正。MFC提供了许多诊断服务,供程序员调 

试程序使用。  



MFC提供的用于诊断程序的宏有:ASSERT、ASSERT_KINDOF、 

ASSERT_VALID、DEBUG_NEW、TRACE、TRACE0、TRACE1、TRACE2、 

TRACE3、VARIFY。本节将详细介绍ASSERT、VERIFY、TRACE 。  



    (1) ASSERT  



这个宏的用法如下:  



ASSERT( booleanExpression )  



其中的参数booleanExpression是一个表达式或指针。  



这个宏用来测试它的参数是否为真。如果参数不为真,这个宏就显示 

一个诊断信息对话框,并终止程序的运行。如果参数为真,它不做任 

何事情。诊断信息按照下面的形式显示:  



Debug Assertion Failed!  



Program:  



File:  


…………………………………………………………Page 635……………………………………………………………

Line:  



其中Program  Name是程序的的名称,File  Names是出错的文件名, 

num是出问题的诊断语句所在的行数。  



诊断信息对话框如图11。2所示。  



                                          



                      图11。 2 诊断输出信息  



值得注意的是,ASSERT仅在MFC的调试 (Debug)版本中有效,在MFC 

的发布 (Release)版本中,ASSERT语句不再有效,它不对参数进行 

真假检测。  



下面的代码中ASSERT作用是检查一个指向用户自定义的类CMyClass的 

指针是否为空;代码如下:  



CMyClass* m_pMyClass=new CMyClass;  



ASSERT(m_pMyClass);  



// 。。。。。。  



    (2) VERIFY  



这个宏和ASSERT差不多,它的用法如下:  



VERIFY( booleanExpression )  



其中的参数booleanExpression是一个表达式或指针。  



在MFC的调试版本中,VERIFY宏检测它的参数,如果参数不为真,弹 

出如图1。2所示的诊断信息对话框。如果参数为真,它不做任何事 

情。  



在MFC的发布版本中,它仍对参数进行测试,但是当参数为假时,不 

弹出诊断信息对话框。  



下面这段代码可以让用户对ASSERT和VERIFFY两个宏之间的差别有更 


…………………………………………………………Page 636……………………………………………………………

深入的了解,这段代码是在MFC的发布版本中编译的,之所以选择发 

布版本是因为在这段代码中两个宏后面的参数都为假,使用发布版本 

编译可以忽略这些错误。但是ASSERT不检测参数的真假,而VERIFY检 

测参数的真假,所以只能弹出一个对话框。  



在一个MFC的多文档应用程序Test中的OnDraw 函数中ToDo语句后 

面添加下面的代码:  



bool m_bValue=false;  



ASSERT(m_bValue & ASSERTMessage());  



VERIFY(m_bValue & VERIFYMessage());  



为CTestView类添加两个成员函数ASSERTMessage()和VERIFYMessage 

 ():  



bool CTestView::ASSERTMessage()  



{  



MessageBox(〃经过ASSERT检验〃);  



return true;  



}  



bool CTestView::VERIFYMessage()  



{  



MessageBox(〃经过VERIFY检验〃);  



return true;  



}  



在MFC的发布版本中编译并运行该程序,弹出如图11。3所示的消息 

框,显示 “经过VERIFY检验”,说明VERIFY检测了它的参数,而 

ASSERT没有检测其参数。  



                                            



                              图11。 3 VERIFY示例  



     (3) TRACE  


…………………………………………………………Page 637……………………………………………………………

TRACE宏的用法如下:  



TRACE( exp )  



其中的参数exp定义了一组数量可变的参数。  



TRACE是一个在程序运行时跟踪变量数值的便捷的方法,它的用法和 

Printf完全相同。  



   l 注意:  



   l 使用TRACE一次最多可以显示512个字符,而且这个宏也只在MFC的 

    调试版本中有效。  



下面的例子使用TRACE宏在程序运行时跟踪变量m_value的值。  



代码如下:  



int m_value=100;  



for(int i=0;i
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!