C++ 调试帮助简介
发布日期:2021-05-07 00:50:45 浏览次数:16 分类:技术文章

本文共 1115 字,大约阅读时间需要 3 分钟。

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 NDEBUG    cerr << “starting main” << endl;#endif//...}
  • 如果NDEBUG未定义,那么程序就会将信息写道cerr中,如果NDEBUG已经定义了,那么程序执行时将会跳过#ifndef和#endif之间的代码。

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

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

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

例子:

// test_console.cpp#include 
#include
#include
using namespace std;int main (int argc, char** argv){ cout<<"argc = "<
<

执行:

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

输出:

argc = 2Error: test_console.cpp :in funciton main at line 13     Compiled on Nov  9 2017 at 14:55:45./testsafd
上一篇:局部静态变量Static详解
下一篇:【浅谈】main函数的三个参数

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月12日 22时40分15秒