Source: C++ primer(version 5)

主要思想是:程序所包含的调试代码仅在开发过程中执行。当应用程序已经完成,并且准备提交时,就会将调试代码关闭。这种方法会用到两项预处理功能:assert 和NDEBUG。

assert预处理宏

定义在<cassert>头文件中
的所谓预处理宏其实是一个预处理变量,它的行为有点类似于内联函数。使用一个表达式作为它的条件:
assert(expr);
只要NDEBUG未定义,assert宏就求解条件表达式expr,如果结果为false,assert输出信息并且终止程序的执行。如果该表达式有一个非零(例如:true)值,则assert不做任何操作。

NDEBUG预处理变量

assert的行为依赖于一个名为NDEBUG的预处理变量的状态。如果定义了NDEBUG,则assert什么都不做。
使用:g++ -D NDEBUG -o test test_console.cpp
这条命令的作用等价于在main.c文件的一开始写#define NDEBUG

使用:

可用NDEBUG预处理变量实现有条件的调试代码:

int main( void )
{
#ifndef NDEBUGcerr << “starting main” << endl;
#endif
//...
}
  • 如果NDEBUG未定义,那么程序就会将信息写道cerr中,如果NDEBUG已经定义了,那么程序执行时将会跳过#ifndef和#endif之间的代码。

五种在调试时非常有用的常量

预处理器还定义了其余五种常有用的常量:

  • FILE _ 文件名
  • LINE _ 当前行号
  • TIME _ 文件被编译的时间
  • DATE _ 文件被编译的日期
  • func _ 函数的名字

例子:

// test_console.cpp
#include <iostream>
#include <cstddef>
#include <cassert>
using namespace std;int main (int argc, char** argv){cout<<"argc = "<<argc<<endl;//assert(argc<3);if(argc<3)cout<<"Error: "<<__FILE__<<" :in funciton "<<__func__<<" at line "<<__LINE__<<endl<<"     Compiled on "<<__DATE__<<" at "<<__TIME__<<endl;for(size_t i=0;i<argc;i++){cout<<argv[i]<<endl;}return 0;
}

执行:

g++ -D NDEBUG -o test test_console.cpp  -std=c++11
./test safd

输出:

argc = 2
Error: test_console.cpp :in funciton main at line 13Compiled on Nov  9 2017 at 14:55:45
./test
safd

C++ 调试帮助简介相关推荐

  1. T2080 U-BOOT与OS内核移植 准备篇(一)——开发调试环境简介

    T2080 U-BOOT与OS内核移植 准备篇(一)--开发调试环境简介 1.本项目选择的工具 2.几个常用工具简介 2.1 Trace32 2.2 Code Warrior 2.3 QorIQ Li ...

  2. 在线JS代码调试网站简介 JSFiddle JSBin JSRUN

    1.JSFiddle 官网:https://jsfiddle.net 简介:在线JS代码调试工具是一个老牌的支持javascript.css.html代码可视化在线调试工具,支持多种应用多种主流框架, ...

  3. 安卓调试精灵 简介

    安卓调试精灵 是一款功能全面,简单易用的辅助开发和调试工具.  下载地址:http://www.pc6.com/softview/SoftView_862954.html 功能简介: 1,安卓日志抓取 ...

  4. Windows高级调试 调试工具简介

    第一部分   概      述 第1章   调试工具简介 许多技术性的书籍和文章都指出了在正确的软件设计和软件工程原则中包含的重要性.有些书侧重于介绍在方法与实践之间的均衡性,而有些书则注重对方法的描 ...

  5. i.MX RT1064-EVK开发板中基于LPC4322JET100的Freelink调试电路简介

    正如"恩智浦i.MX RT1064-EVK开发板入门指南"一文中0所述,RT1064-EVK开发板上有一个基于LPC4322的新的调试接口. 基于LPC4322JET100的调试接 ...

  6. GDB调试器——GDB调试器简介

    以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除. 一.程序调试器的含义 程序中的错误主要分为 2 类,分别为语法错误和逻辑错误. 程序中出现的语法错误可以借助编译器解决:但逻辑错误则只能靠 ...

  7. Windbg/x64dbg/OllyDbg调试器简介

    原文链接: https://blog.csdn.net/libaineu2004/article/details/104081676 一.Windbg Windbg是微软开发的一套调试器中的组件.Wi ...

  8. 南京观海微电子---残影原理和调试方法简介

    1.什么是残影 Image Sticking残影:残影是指画面切换之后前一个画面不会立刻消失,而是慢慢不见的现象. 2.残影的分类 残影也有类别之分,目前主要有以下三种不同维度的分类方式,具体总结如下 ...

  9. ipdb调试命令简介

    目录 参考 参考 Python 调试模块 ipdb

最新文章

  1. 基于改进SURF算法的实时视频拼接
  2. MSSQL事务开发指南
  3. 自适应均衡器 matlab程序,基于lms自适应均衡器matlab仿真
  4. tensorflow没有这个参数_解决TensorFlow中Batch Normalization参数没有保存的问题
  5. 【服务器防护】centos iptables 防火墙设置 mac过滤
  6. convert py to pyd
  7. 设置数据库CRM允许select into 创建表
  8. linux 编译程序的四个过程
  9. 嗜血者高盛:北京上空的秃鹰?
  10. 驾驶证/行驶证信息提取与识别
  11. 【搬运】不思议的小故事,其实舰娘们也是有灵性的
  12. 达梦数据库、表字段创建索引或删除索引,增加表字段、修改字段类型或长度、修改注释sql语句
  13. Adversarial Logit Pairing_CSDN
  14. org.elasticsearch.common.util.concurrent.EsRejectedExecutionException 查询超时异常处理记录---一定要用单例模式
  15. B站收藏备份工具设计和实现 Bilibili Memory 哔哩哔哩记忆
  16. Elasticsearch 开箱指南
  17. opencv +Hog + SVM 车辆检测
  18. 手把手教你开发人工智能微信小程序(1):Hello WeChat!
  19. CLAN Studio Toolkits - Icon Creator
  20. dat image 微信_微信Dat文件解码

热门文章

  1. HarmonyOS之常用组件RoundProgressBar的功能和使用
  2. OpenGL之渲染大小球自转和公转的效果
  3. Python with...as... 语法深入解析
  4. 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
  5. 大数据WEB阶段Spring框架 AOP面向切面编程(一)
  6. 大数据WEB阶段(五)jQuery
  7. 【ARM】ARM汇编程序设计(一)
  8. 【Linux】一步一步学Linux——tput命令(232)
  9. 【Linux系统编程】 文件描述符的复制:dup()和dup2()
  10. php读取excel的公式,PHPExcel在解析xlsx文件中的公式时返回零“0”