使用C/C++预定义宏进行调试跟踪代码
概述
编写C/C++代码时,控制台调试/错误输出是比较常用而且主要的代码调试、排错方法。幸好各大编译器都支持一些预定义的宏可以方便我们在编写代码时,获取代码文件路径、名字,代码行号,编译时间等。
这里要说的主要是如下几个:__FILE__, __LINE__, __DATE__, __TIME__, __FUNCTION__.
用途
- __FILE__: 获取当前代码文件的全名,包括路径;
- __LINE__: 获取当前代码行数,即使用该宏的行;
- __DATE__: 获取当前代码文件被编译的日期,年月日;
- __TIME__: 获取当前代码文件被编译的时间,时分秒;
- __FUNCTION__: 获取使用该宏的函数名。
使用方式
#define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d error: %s) " \
M "\n", __FILE__, __LINE__, error_msg(), ##__VA_ARGS__)
#define compile_time() fprintf(stdout, "[INFO] Compiled at %s %s\n", \
__DATE__, __TIME__)
#define get_function() fprintf(stdout, "[INFO] Used in %s.\n", __FUNCTION__)