Visual C++调试 ASSERT()和TRACE()工具

2023-05-16

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

Visual C++调试器

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

Visual C++调试器

 

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

Visual C++调试器


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

Visual C++调试器

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

Visual C++调试器

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

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

Visual C++调试器 

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

Visual C++调试器

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

Visual C++调试器 

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

Visual C++调试器 

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

Visual C++调试器

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

提示

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

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

Visual C++调试器 

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

Visual C++调试器

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

Visual C++调试器 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual C++调试 ASSERT()和TRACE()工具 的相关文章

  • 将 null 传递给方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Linux中通过perf为未列出的函数添加动态跟踪点

    我正在尝试跟踪功能zap pte range来自 mm memory c 使用perf 但功能并未在其中列出perf probe F 那么有没有办法动态追踪这个函数呢 IE 显式添加跟踪点并重新编译内核 perf probe a zap p
  • 当 KVM-QEMU 打开时,Intel-PT 不记录任何数据包

    我尝试在主机上使用 Intel PT 同时在客户机上运行通用软件程序 所以我期望主机中运行的 Intel PT 将记录所有相关数据包 如 PIP FUP TSC 等 以及所有基于 VM 的数据包 如 VMCS 我使用以下命令 perf kv
  • 断言在 PHP 中不起作用。很简单。我究竟做错了什么?

    就像断言甚至没有被调用一样 我很困惑 版本 php v PHP 7 0 11 1 deb sury org xenial 1 cli NTS Copyright c 1997 2016 The PHP Group Zend Engine v
  • DefaultTraceListener 的性能影响

    使用时System Diagnostics跟踪 如果不删除 默认 跟踪侦听器 是否会对性能产生重大 可测量 影响 生产ASP NET应用在release模式 与TRACE在编译时定义的常量 但在运行时没有附加调试器 为了澄清 问题是关于 默
  • 中介 R 包 p 值:获得更多有效数字的解决方法?

    我正在运行多项中介分析 需要纠正多重比较 然而 中介包提供的 p 值似乎已四舍五入存储 正如 Roland 关于此问题的非常有用的答案中所观察到的 R中介包 逗号后面的数字 https stackoverflow com questions
  • 了解 Trace 在 C# 中的工作原理

    我想了解跟踪是如何工作的 我创建了一个简单的新网络项目 这是我可以使用的代码 Create a trace listener for the event log EventLogTraceListener myTraceListener n
  • Python:断言变量是实例方法?

    如何检查变量是否是实例方法 我正在使用Python 2 5 像这样的事情 class Test def method self pass assert is instance method Test method inspect ismet
  • 在 Boost Test 框架中测试断言

    我使用 Boost Test 框架对我的 C 代码进行单元测试 并想知道是否可以测试函数是否会断言 是的 听起来有点奇怪 但请耐心听我说 我的许多函数在输入时检查输入参数 断言它们是否无效 对此进行测试将很有用 例如 void MyFunc
  • WinDbg——TraceListener 和饱和线程池

    我有一个多线程 NET Windows 服务 它间歇性地挂起 可能每两周 24 7 运行一次 当发生挂起时 线程池完全饱和 因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞 根据 Windbg 的说法 有问题的代码中没有任何锁 也没有
  • 如何跟踪服务 firebird

    如何使用delphi xe10跟踪服务firebird服务器的所有事件 这是我的代码 my TIBControlService Create Self my ServerName 127 0 0 1 3050 my Protocol TPr
  • .NET 生产代码中的“Assert”语句

    离开是否明智Trace Assert and Debug Assert代码中的语句是否 稳定 并且已移至测试和生产环境中 如果是这样 这些断言语句有何帮助 让 Guard 类等检查异常情况并适当引发异常还不够吗 调试断言 http msdn
  • 2 个 JUnit Assert 类之间的差异

    JUnit 框架包含 2Assert类 显然在不同的包中 和每个类的方法看起来非常相似 有人能解释这是为什么吗 我指的课程是 junit framework Assert http junit org junit javadoc 4 5 j
  • 使用断言的最佳实践?

    使用是否存在性能或代码维护问题assert作为标准代码的一部分而不是仅将其用于调试目的 Is assert x gt 0 x is less than zero 比更好或更差 if x lt 0 raise Exception x is l
  • 最Pythonic的方式进行输入验证[重复]

    这个问题在这里已经有答案了 在 Python 中进行用户输入验证的最 正确 的 Pythonic 方法是什么 我一直在使用以下内容 while True stuff input Please enter foo try some test
  • 如何在运行时检测某些编译器选项(如断言)是否设置为 ON?

    Delphi 中检查断言是否有效的条件是什么 当断言在代码中不活动时 我希望能够做一些事情来抑制有关未使用变量的提示 例如 procedure Whatever var v Integer begin v DoSomething Asser
  • 使用 Assume.assumeTrue 或 Assert.assertTrue,测试何时退出?

    我正在使用 JUnit 4 12 这是我目前对经常使用的以下 API 的理解 假设真 如果表达式计算结果为假 测试将停止并被 被忽略 assertTrue 如果条件为 false 则抛出 AssertionError assertEqual
  • 继续断言测试用例

    上次我使用 testcafe 时 我意识到这个伟大框架中缺少我的功能 该功能类似于 尽管出现了断言 但仍继续执行特定测试的其余部分 更准确地说 我描述了我缺少此类功能的原因 假设您正在测试 Web 应用程序 例如要在其中输入合同日期的 We
  • 使用 Microsoft 托管扩展和 net472 时活动为空

    我正在尝试将 OpenTelemetry 与使用 Microsoft Extensions Hosting 的 net472 应用程序一起使用 我这样创建我的主机 Host CreateDefaultBuilder ConfigureSer
  • 支持非致命故障的 Python 测试框架

    我正在评估自动化系统测试的 测试框架 到目前为止我正在寻找一个Python框架 在 py test 或鼻子中 我看不到类似我从谷歌测试框架中知道的 EXPECT 宏的东西 我想在一个测试中做出多个断言 同时不在第一次失败时中止测试 我在这些

随机推荐

  • 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第 几号的那位。

    问题 xff1a 有n个人围成一圈 xff0c 顺序排号 从第一个人开始报数 xff08 从1到3报数 xff09 xff0c 凡报到3的人退出圈子 xff0c 问最后留下的是原来第 几号的那位 解决思路 我的解决思路是先给这n个人排序生成
  • 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)

    题意 xff1a 有一个骆驼 xff0c n个绿洲遍布在数轴上 xff0c 第i个绿洲的坐标为x i xff0c 保证x i 单增 骆驼的驼峰有体积初始值V 当驼峰的体积变为v的时候 xff0c 驼峰中至多只能够存储v L的水 骆驼希望走完
  • windows10远程桌面登录ubuntu20.04

    一 ubuntu系统共享设置 设置远程共享密码 xff0c 密码要记住 xff0c 一会在windows远程登陆的时候 xff0c 第二步要输入密码 二 安装xrdp sudo apt get install xrdp 三 安装dconf
  • 配置ArchLinux系统

    配置ArchLinux系统环境 文章目录 配置ArchLinux系统环境配置 96 AUR 96 中国源桌面环境安装登录管理器安装字体与其他附加组件安装驱动安装中文输入法安装 xff1a 优化配置 96 TRM 96 磁盘优化 96 tlp
  • Linux字体推荐

    Linux字体推荐 以下是Linux推荐的字体在不同Linux发行版的不同包装名称 xff0c 每款都很精致 xff0c 请欣赏 xff01 ArchLinux字体软件包名称Debian字体软件包名称Fedora字体软件包名称Gentoo字
  • 安装配置fcitx输入法

    安装配置fcitx输入法 文章目录 安装配置 96 fcitx 96 输入法安装输入法引擎可用的 96 fcitx 96 输入法包括 xff1a 中文日文其语言 可用的 96 fcitx5 96 输入法包括 xff1a 中文日文其他语言 输
  • 使用adb安装或卸载卸载手机系统应用

    使用adb安装 卸载手机系统应用 准备工具 在浏览器下载并打开带有adb的工具 xff1b 手机打开 开发者选项 xff0c 在 开发者选项 中开启usb调试并连接电脑 xff0c 手机端选择 传输文件 xff1b 在手机端点击 一律允许计
  • OpenWRT好用的插件

    PPP xff08 连接Internet共享 xff09 xff1a 用于让路由器到外网的连接 xff1b 资源占用小 xff0c 官网有相应版本可供下载 xff0c 软件包名称为 ppp mod pppoe Adblock xff08 广
  • Gentoo Linux查看已安装软件包

    Gentoo Linux查看已安装软件包 对于Gentoo Linux xff0c 需要一个名为Equery的软件来查看已安装软件包的信息 Equery是一个用于简化常用 Portage 操作的工具 此外 xff0c 可以显示包依赖项 元数
  • 2016 Personal Training #4 Div.2 A B C G H

    xff21 URAL 2091 题意 xff1a 有四个类别 xff11 xff0e xff21 和 xff22 都包含 xff0c xff12 xff0e 只包含 xff21 不包含 xff22 xff0c xff13 xff0e 只包含
  • Gentoo Linux系统清理

    Gentoo Linux系统清理 一 清除源码包文件 清除已经下载的软件包 xff0c 步骤如下 xff1a 在这一步中 xff0c 所使用的工具是rm命令 xff0c 将会强制删除 使用前 xff0c 请仔细检查所要删除的目录是否正确 x
  • Gentoo Linux卸载无用内核

    Gentoo Linux卸载无用内核 移除内核源代码 在安装新的内核并正常工作之后 xff0c 旧的内核就可以移除了 emerge的 depclean 选项 xff08 缩写为 c xff09 可以用来移除所有旧的或者不用的软件版本 xff
  • flink学习(一)---Maven配置简单易学

    一 下载Maven 进入官网http maven apache org 点击Download 进入官网之后 xff1a 我演示的是windows的配置步骤 xff1a 1 将安装包放入C盘 xff0c 进行解压 xff0c 将maven文件
  • eclipse括号风格改为独占一行风格

    一 原Eclipse生成的花括号 情形 public class test public static void main String args System out println 34 Eclipse 的花括号 xff08 brace
  • SecureCRT按Ctrl+S后假死问题

    SecureCRT作为著名的SSH客户端 xff0c 经常用于登陆远程服务器 在上面编辑文本 xff0c 特别是用vi打开两个文本 xff0c 并且需要切换时 xff0c 很容易出现卡死的现象 xff0c 不能接受任何的键盘输入 很是郁闷
  • dll和lib(包括静态链接库和与dll同时生成的lib)

    1 xff1a 神马是Dll和Lib xff0c 神马是静态链接和动态链接 大家都懂的 xff0c DLL就是动态链接库 xff0c LIB是静态链接库 DLL其实就是EXE xff0c 只不过没main 动态链接是相对于静态链接而言的 所
  • Doxyfile的使用

    Doxygen是一个开源软件 xff0c 它类似javadoc xff0c 能够根据源代码和源代码中特定格式的注释 xff0c 生成文档和UML图 xff08 如果要生成UML图 xff0c 需要下载可选组件Graphviz xff09 的
  • 微软亚洲研究院(MSRA)面经

    我最早把简历投给MSRA是在美国交换的时候 xff0c 大概11月左右吧 不过估计是因为那时候我人也不在国内 xff0c 11月也是个收实习生的淡季 xff0c 没什么空位子 xff0c 所以在美国期间他们也并没有打国际长途联系我 后来1月
  • VIM自动缩进等格式设置方法

    xff08 1 xff09 VIM的环境是根据读取的配置文件来设定的 xff0c 配置文件的位置通常在目录 etc 下面 xff0c 有个名为vimrc的文件 xff0c 这是系统中公共的vim配置文件 xff0c 对所有用户都有效 而在每
  • Visual C++调试 ASSERT()和TRACE()工具

    Visual C 43 43 IDE提供了功能强大的调试器 xff0c 包括联编 xff08 build xff09 工具和调试 xff08 debug xff09 工具 xff0c Visual C 43 43 的调试工具栏如图2 20所