预备知识:
1.程序所包含的调试代码仅在开发过程中执行,当应用程序已经完成,并且准备提交时,就会将调试代码关闭。可使用NDEBUG预处理变量实现有条件的调试代码;
2.gcc/g++编译器提供定义NDEBUG的命令行选项:
$ g++ -NDEBUG ./debug_test.cpp
类似这样的命令行等效于在debug_test.cpp文件的开头提供了#define NDEBUG预处理命令。
3.预处理器定义了四种在调试时非常有用的常量:
__FILE__ 文件名
__LINE__ 当前行号
__TIME__ 文件被编译的时间
__DATE__文件被编译的日期
4.另一个常见的调试技术是使用NDEBUG预处理变量以及assert预处理宏。assert宏需要一个表达式作为它的条件:
assert (expr)
只要NDEBUG未定义,assert宏就求解条件表达式expr,如果结果为false,assert输出信息并且终止程序的执行。如果该表达式有一个非零(例如:true)值,则assert不做任何操作。
以下通过一个程序来说明。
程序清单:
编译源程序:
g++ -o debug_test debug_test.cpp
运行程序:
./debug_test
执行结果:
Starting main function...
Please input a word:love
Error: debug_test.cpp: line 20
Compiled on Dec 12 2010 at 22:00:16
Word read was "love": Length too short
如果在编译的时候加上选项"--DNDEBUG"调试:
g++ -o debug_test -DNDEBUG debug_test.cpp
运行程序:
./debug_test
运行结果:
Please input a word:Love
Error: debug_test.cpp: line 20
Compiled on Dec 12 2010 at 22:19:50
Word read was "Love": Length too short