C语言下调试信息打印与错误位置定位功能的实现
来源:互联网 发布:ask软件 编辑:程序博客网 时间:2024/06/05 04:48
1.通常在代码调试过程中为了更好的定位出错的位置信息,需要自定义ASSERT()函数。以下是本人在自我理解的基础上,自定义了ASSERT()函数,具体代码如下:
(1)头文件
#ifndef MY_ASSERT_DEBUG#define MY_ASSERT_DEBUG 1#include <stdio.h>#define MY_DEBUG_TEST void MyAssertFunction(const char *pFileName,unsigned long lineNum,const char *pFuncName);#ifdef MY_DEBUG_TEST#define DEBUG(format,...) printf("Debug Date:%s ,File :%sLine:[%4d] ,Function:%s.\n",__DATE__,__FILE__,\__LINE__,__FUNCTION__);\printf(format,##__VA_ARGS__);#else#define DEBUG(format,...) printf(format,##__VA_ARGS__);#endif#define MY_ASSERT(x) if(x==0)\MyAssertFunction(__FILE__,__LINE__,__FUNCTION__)#define FUNC_SUCCESS 1#define FUNC_FAIL 0#endif(2)源文件
//标注头文件引用#include <stdio.h>//自定义头文件引用#include "AssertAndDebug.h"void MyAssertFunction(const char *pFileName,unsigned long lineNum,const char *pFuncName){printf("ERROR!::%s[%5d]:%s\n",pFileName,lineNum,pFuncName);}int TestFunction1(){DEBUG("This is TestFucntion1.\n");return FUNC_FAIL;}int main(int argc,char *argv[]){DEBUG("This is main function.\n");MY_ASSERT(TestFunction1());getchar();return FUNC_SUCCESS;}2.代码解析
(1)自从C99以后,编译器开始支持不定参数的宏定义,例如:#define DEBUG(format,...) printf(format,##__VA_ARGS__)
其中"##"的功能是,如果可变参数被忽略或为空,将使预处理器去掉“##”前面的逗号,以防出错。
(2)ANSI C标准下编译器的内置宏:
__LINE__:获取代码的当前行
__FILE__:获取源文件的名称
__DATE__:获取当前编译日期
__TIME__:获取当前的编译时间
__STDC__:当程序严格遵循ANSI C标准时,该宏定义为1
__cplusplus__:当编译c++程序时,该标识符被定义
编译器编译源代码时,会自动将这些宏替换为相应内容。
阅读全文
0 0
- C语言下调试信息打印与错误位置定位功能的实现
- 原创|Android逆向调试的打印调试信息定位代码位置的一个小技巧
- c语言编码 调试信息打印方法
- Release下支持调试信息的打印,Debug_Trace的实现
- C语言文件位置标记的定位
- 标准c语言调试技巧,打印调试信息技巧
- C 打印调试信息的宏函数
- C语言调试打印
- linux C下 利用宏函数打印调试信息
- Linux 程序开发打印 Debug 信息的使用技巧--C语言中几种输出调试信息的方法
- Linux 程序开发打印 Debug 信息的使用技巧--C语言中几种输出调试信息的方法
- linux C宏定义实现打印调试信息
- C语言编程实现GPS定位信息的接受和显示
- Linux下简单的日志功能实现(C语言)
- Linux下用C语言实现ls -l的功能
- Android下 c语言 打印调试堆栈方法(一)
- 使用jni实现在C语言中打印log信息
- c语言可变参宏函数实现打印Debug信息
- 词向量源码解析:(5.7)ngram2vec源码解析之counts2shuf等
- AJAX(二)---局部刷新实现分页效果的实现
- Java 堆、栈和方法区
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- return与finally的执行顺序与返回值问题
- C语言下调试信息打印与错误位置定位功能的实现
- Java 泛型演示
- Android Gradle 常用使用场景实现方式的总结
- 两台服务器间使用rsync和inotify-tools实现文件同步
- 洛谷 P1445 没占到1444的愤怒
- 洛谷 P3404 斐波那契(线段树)
- 如何写SysV服务管理脚本
- git 常用语句总结
- Java 泛型类