visual c++ MFC调试宏
visual c++ MFC调试宏
在介绍MFC调试宏之前,读者需要理解两个概念:跟踪和断言。
跟踪可以让程序在运行时遇到跟踪宏在输出窗口显示指定信息。
断言可以让程序在断言条件不成立时暂停程序的运行。
众所周知,调试就是找出程序设计时存在的错误,而跟踪和断言在查找程序设计错误时是非常有效的。MFC提供了一些跟踪和断言宏用于程序的调试,其中最常用的宏有TRACE、ASSERT和ASSERT_VALID。
注意:这些MFC调试宏只用于Debug版应用程序。
1.跟踪宏TRACE
TRACE宏的功能是让程序在运行时遇到TRACE宏时在输出窗口显示指定信息。其格式如下:
TRACE(<表达式>);
其中,参数<表达式>是由输出格式和变量等组成的表达式,其格式与用法与printf()函数一样,只是将<表达式>的计算结果输出到Output窗口中。
2.断言宏ASSERT
ASSERT宏的功能是当ASSERT宏的参数不为真时,暂停程序的执行。其格式如下:
ASSERT(<条件表达式>);
当参数<条件表达式>的运算结果为真时,程序继续执行;如果为假,则暂停程序的运行,并弹出一个对话框,告诉用户程序暂停运行的行及所在文件的信息。用户可以根据情况选择终止运行、调试程序或继续运行。
3.断言有效宏ASSERT_VALID
ASSERT_VALID的语法如下:
ASSERT_VALID(<指针>);
ASSERT_VALID宏用于检查指针和对象的有效性。对于一般指针,只检查指针是否为空。对于MFC类对象指针,还调用CObject::AssertValid()成员函数判断对象是否合法。
ASSERT_VALID与ASSERT类似,也是使用对话框提示用户指针或对象无效的。
4.应用
下面例子是利用AppWizard生成的单文档应用程序框架中系统生成的代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbarn"); //使用跟踪宏
return -1; // fail to create
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
// http://www.isstudy.com
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
如果创建失败,在Output窗口会出现提示信息,如图1所示。
如果创建ToolBar失败,在Output窗口中显示的提示文本

图1 跟踪宏的输出结果