设为首页 加入收藏

TOP

2.2.5 Visual C++调试器
2013-10-07 00:50:56 来源: 作者: 【 】 浏览:52
Tags:2.2.5 Visual 调试器

2.2.5  Visual C++(www.cppentry.com)调试器

Visual C++(www.cppentry.com) IDE提供了功能强大的调试器,包括联编(build)工具和调试(debug)工具,Visual C++(www.cppentry.com)的调试工具栏如图2-20所示,在调试状态下,其中的某些按钮才会显示。

Visual C++(www.cppentry.com)调试器

从左到右,各按钮的含义如表2-3所示。

Visual C++(www.cppentry.com)调试器

 

如果我们发现某个程序中有bug 产生,就可以对其代码部分进行调试,以下罗列出通常采取的步骤。
在可疑的代码处添加断点。
单击工具栏中的【启动】按钮,或者按【F5】键,开始调试运行程序。
当运行至断点时,程序会暂停下来,如图2-21所示。

Visual C++(www.cppentry.com)调试器


在暂停状态,我们可以通过打开其他功能窗口来查看程序状态,如:某个变量的值、程序调用栈的结构、寄存器的值等。这些窗口可以通过【调试】→【窗口】菜单项找到,如图2-22所示。

Visual C++(www.cppentry.com)调试器

可用的调试窗口如表2-4所示。

Visual C++(www.cppentry.com)调试器

通过调试工具,程序员可以及时地观察到调用栈、各内存变量的变化,从而最终找到异常的代码所在。

除调试工具外,Visual C++(www.cppentry.com)还提供了两个很有用的宏函数:TRACE()和ASSERT(),它们常常配合调试使用。TRACE的函数原型为:

Visual C++(www.cppentry.com)调试器 

TRACE()的效果如图2-23所示。可以看到,TRACE()和printf()的使用方式一样。只不过它的输出不是标准输出设备,而是Visual C++(www.cppentry.com)的输出窗口。

Visual C++(www.cppentry.com)调试器

断言ASSERT用于检查一些“不应该”发生的情况。ASSERT的函数原型如下:

Visual C++(www.cppentry.com)调试器 

ASSERT的含义就是“条件booleanExpression必须得满足”(即条件bExpression为true),如:

Visual C++(www.cppentry.com)调试器 

“条件booleanExpression一定得满足”,那么,“不满足”会怎么样?当ASSERT 断言的条件bExpression为false的时候,Visual C++(www.cppentry.com)将会给出红色的警告,如图2-24所示。

Visual C++(www.cppentry.com)调试器

此时,我们可以单击【终止】按钮以终止该程序;单击【忽略】按钮以继续执行后面的语句;如果要跟踪进去查看错误源,则单击【重试】按钮,这样的话程序将会转至发生ASSERT错误的代码行,并暂停程序执行。

提示

TRACE()和ASSERT()宏只有在调试版本(即_DEBUG宏被定义)时才能奏效。对于Release版本,TRACE()和ASSERT()宏没有任何作用。

此外,Visual C++(www.cppentry.com)调试器提供了对内存泄漏的检测功能,考察如下一段包含内存泄漏的C++(www.cppentry.com)程序:

Visual C++(www.cppentry.com)调试器 

运行如上包含内存泄漏的程序时,可以看到Visual C++(www.cppentry.com)的输出窗口产生如下内容,如图2-25所示。

Visual C++(www.cppentry.com)调试器

其明确地输出内存泄漏的信息:

Visual C++(www.cppentry.com)调试器 

光盘导读

该项目对应于光盘中的目录“\ch02\MemleakTest”。

虽然通过调试窗口,我们可以很明显地看到内存泄漏的所在(一个new出来的整形变量所占用的4个字节没有释放),但是针对稍微庞大一点的项目而言,如上的这种信息似乎也只能起到提醒的作用,程序员很难定位到程序的出错点。这就需要更高的内存处理和调试技巧,第3.5节“智能指针(smart pointer)”将会介绍如何采用智能指针避免程序中的内存泄漏问题。

MSDN参考

欲在MSDN中查看相关信息,可使用关键字:“MFC,内存管理”。

【责任编辑:王晶 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.4 Visual C++应用向导 下一篇2.3.1 脱离Visual C++编写程序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: