Visual C++调试宏概述

本文介绍了Visual C++中用于调试的多种宏,包括ASSERT、ASSERT_VALID、TRACE和VERIFY等,详细解释了这些宏的功能及使用场景,帮助开发者在调试过程中更有效地定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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”对话框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值