Visual C++调试宏概述

来源:互联网 发布:成塔软件怎么样? 编辑:程序博客网 时间:2024/06/02 03:15

拜读朱敏娜老师等编写的书籍,觉得很有用,总结一下。详细的操作还要再研究。

Visual C++提供的用于调试的宏有ASSERT、ASSERT_KINDOF、  ASSERT_VALID、  DEBUG_NEW 、 TRACE 、  VERIFY。

1.ASSERT和ASSERT_VALID宏

在调试时,可以利用宏ASSERT和ASSERT_VALID来设定断言。

宏ASSERT的原型如下:

ASSERT(Boolean Expression);

参数Expression是一个逻辑表达式。在程序运行过程中,若逻辑表达式为TRUE,则一切运行正常。若该表达式的值为FALSE,程序会停止运行并且系统会弹出一个警告对话框。

在警告对话框中提示了程序错误所在,并且终止、重试和忽略3个按钮提示。若选择终止按钮,系统将停止程序的调试进程。若选择重试按钮,系统将调用函数AfxDebugBreak(),并激活调试器,显示出断言失败的代码。若选择忽略按钮,系统将会忽略该错误,继续运行程序。ASSERT宏只在Debug模式下起作用,在Release模式下将被忽略。

宏ASSERT_VALID可用来确认CObject的派生类对象是否是有效对象:

原型如下:ASSERT_VALID(pObject);

参数pObject是一个对象指针。ASSERT_VALID在release模式下不起作用,在debug模式下,如果对象指针为NULL,vc++会调用对象其成员函数AssertValid()检测。当所有的检测都失败了,将会弹出和ASSERT一样的警告对话框。

2.TRACE宏

TRACE宏用于程序在DEBUG模式下运行,输出一些调试信息,使用方法类似于C的prinf函数。开发人员可以在程序不同地方添加TRACE宏,从而了解程序的一些运行状态,如某函数或代码有没有被执行。其具体应用如下:

int x=1;int y=2;float z=3.0;TRACE("x=%d\n",x);TRACE("x=%d and y=%d\n",x,y);TRACE("x=%d and y=%d and z=%f\n",z,y,z);
当选择了debug目标,并且afxTraceEnable变量被置为TRUE时,TRACE宏也就随之被激活了。但在程序的Release版本中将完全被禁止。

3.VERIFY宏

原型如下:

VERIFY(Boolean Expression);

参数Expression是一个表达式货真指针。在Debug模式下,VERIFY宏检测其参数。当表达式的值为0时,终止程序运行并弹出“Debug Assertion Failed”对话框,给出诊断信息。如果表达式的值为非零,程序正常运行。

       与其他宏不同的是,在RELEASE模式下,VERIFY宏仍然起作用。但当参数表达式的值为零时,并不弹出“Debug Assertion Failed”对话框,也不终止程序的运行。

在DEBUG模式下,用VERIFY宏来检测函数的返回值。如下代码所示:

HDC hdc;VERIFY((hdc=::GetDC(NULL))!=NULL);
当GetDC(NULL)的返回值为NULL时,终止程序的运行并弹出“Debug Assertion Failed”对话框。

原创粉丝点击