按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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