C编写的调试宏

#define LOG(...) {char _bf[1024]; snprintf(_bf, sizeof(_bf),__VA_ARGS__);fprintf(stderr,"%s", _bf);}

以上的代码为另外一种风格,后期可以进行封装。

<<debug.h>>

#ifndef _DEBUG_H_
#define _DEBUG_H_

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define ERRBUFLEN 1024

#ifdef DEBUG_ON

#define ERR_PRINT(str) \
  do \
  { \
  char errbuf[ERRBUFLEN] = { '\0' }; \
  snprintf(errbuf, ERRBUFLEN, "[file %s line: %d] %s", __FILE__, __LINE__, str); \
  fprintf(stderr, "\033[31m"); \
  perror(errbuf); \
  fprintf(stderr, "\033[0m"); \
  } while( 0 )
#define INFO_PRINT(str) \
  do \
  { \
  printf("\033[31m"); \
  printf("[file: %s line: %d] %s\n", __FILE__, __LINE__, str); \
  printf("\033[0m"); \
  } while ( 0 )
#else
#define ERR_PRINT(str)
#define INFO_PRINT(str)
#endif

#endif

#ifndef _DEBUG_H_
#define _DEBUG_H_
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define ERRBUFLEN	1024
#ifdef DEBUG_ON
#define ERR_PRINT(str) \
  do \
  { \
  char errbuf[ERRBUFLEN] = { '\0' }; \
  snprintf(errbuf, ERRBUFLEN, "[file %s line: %d func:%s] %s", __FILE__, __LINE__, __FUNCTION__, str); \
  fprintf(stderr, "\033[31m"); \
  perror(errbuf); \
  fprintf(stderr, "\033[0m"); \
  } while( 0 )
#define INFO_PRINT(str) \
  do \
  { \
  printf("\033[31m"); \
  printf("[file: %s line: %d func:%s] %s\n", __FILE__, __LINE__, __FUNCTION__, str); \
  printf("\033[0m"); \
  } while ( 0 )
#else
#define ERR_PRINT(str)
#define INFO_PRINT(str)
#endif
#endif

<<debug.c>>

#include "debug.h"

int main()
{
  printf("test\n");
  FILE *fp = NULL;

  fp = fopen("./none.txt", "r");
  if (NULL == fp){
    ERR_PRINT("fopen error");
  }

  int i = 1;
  if (i < 2){
    INFO_PRINT("i < 2");
  }

  return 0;
}

#include "debug.h"
int main()
{
  printf("test\n");
  FILE *fp = NULL;

  fp = fopen("./none.txt", "r");
  if (NULL == fp){
    ERR_PRINT("fopen error");
  }

  int i = 1;
  if (i < 2){
    INFO_PRINT("i < 2");
  }
  return 0;
}

运行结果:

 

 

gcc的-D和-U参数:宏的设置与取消

时间: 2024-08-03 17:36:09

C编写的调试宏的相关文章

浅谈ASP程序的编写和调试:给初学者

程序|初学 很多朋友觉得ASP不是很好学,我觉得其实有了一定的编程基础,再加上那么一点点技巧,入门是不难的(不过要做好也不是很容易,要很多的相关知识--什么Sql Server数据库语言啦,数据结构啦(这些都是在优化Asp的算法时候要熟悉的). 在这只和大家谈谈我个人是怎书写和调试ASP的,希望能给大有一点帮助-- ASP脚本的书写: 一.注意区分清楚html语法和VBScript语法.因为ASP是混合使用Html语法和VBScript语法的(当然,我全部写成VBScript语法也可以,不过那样

浅谈Asp程序的编写和调试——给初学者

程序|初学     很多朋友觉得Asp不是很好学,我觉得其实有了一定的编程基础,再加上那么一点点技巧,入门是不难的(不过要做好也不是很容易,要很多的相关知识--什么Sql Server数据库语言啦,数据结构啦(这些都是在优化Asp的算法时候要熟悉的).    在这只和大家谈谈我个人是怎书写和调试Asp的,希望能给大有一点帮助--Asp脚本的书写: 一.注意区分清楚html语法和VBScript语法.因为Asp是混合使用Html语法和VBScript语法的(当然,我全部写成VBScript语法也可

在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()

游戏制作已经开始采用C++了,却鲜有人选择使用MFC.但笔者觉得的 ASSERT(),VERIFY()和 TRACE()这几个宏很好用.所以就想自己写一个版本来适应Windows平台下不同的工程类型. 提醒: ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息.在 Release 版本的程序中它不起任何作用. VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效(译者注:原作者在这里没有讲清楚,VERIFY()不会打印说明,只是会对参数表

调试宏

比如:#define  DebugShowMessage( Msg )   ShowMessage (AnsiString(Msg)) 非常方便

Excel编写宏 新增按钮快速更改大小写

经常用Word的朋友都知道,在Word中可以方便地更改英文字符的"大写"."小写"."句首字母大写"和"词首字母大写"(图1). 电脑教程 但这些功能Excel没有,如果想在Excel中使用这些功能就必须手动修改或者用复杂的公式来进行转换.其实我们可以编写相关的宏,一劳永逸地解决这个问题. 首先绘制四个命令按钮,将按钮上的文字更改为"全部大写"."全部小写"."句首字母大写&q

masm中list文件和宏的一些常用编译调试查看方法

    我们知道使用用 ml /Fl a.asm 可以生成lst文件,但是如果不加调整,masm默认生成的lst文件是非常大的,因为它包含了很大的windows必须用到的头文件内容,为了减小lst文件大小,便于观察实际源代码,我们可以用一下手段删除多余信息: 1 用.nolist ...  .list括住不想显示的内容: 2 用.nocref删除所有符号信息: 3 用 ml /Sn 关闭符号表以减少lst文件大小:          我们还可以控制源代码中的宏(MACRO)的显示,以便于调试宏:

自己动手编写CSDN博客备份工具-blogspider

来源:http://blog.csdn.net/gzshun   我之前一直在看lucene,nutch,发现有这么一个现成的小应用,特转来学习下!mark一下. 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫. 网络爬虫最重要的任务,就是从互联网搜索出需要的信息,将网页抓取下来并分析,很多搜索引擎,比如百度,谷歌,后台都有一只很强悍的网络爬虫,用来访问互联网上的网页,图片,视频等内容

windows程序调试

调试策略 第一章         调试的过程 1.         成功而高效的调试的关键是找到准确的错误信息 2.         一旦找到一个错误,就可能找到更多.类似的代码可能还有类似的错误 3.         从错误中学习如何预防将来会产生的错误 4.         对于新代码,根本不需要执行测试来判断它是否有错误 第二章         编写便于调试的C++代码 C++语言和编程风格 1.         在需要的时候使用语言的高级特性 2.         要写出能被"人&quo

在PL/SQL 开发中调试存储过程和函数的一般性方法

存储过程|函数 在PL/SQL 开发中调试存储过程和函数的一般性方法摘要: Oracle 在PLSQL中提供的强大特性使得数据库开发人员可以在数据库端完成功能足够复杂的任务, 本文将结合Oracle提供的相关程序包(package)以及一个非常优秀的第三方开发工具来介绍在PLSQL中开发及调试存储过程的方法,当然也适用于函数. 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息.原文出处: http://www.aiview.com/notes/ora_using_