美文网首页iOS 技术文档收录iOS功能开发
iOS自定义debug模式下的NSLog宏输出

iOS自定义debug模式下的NSLog宏输出

作者: hnxyzhw | 来源:发表于2016-11-18 15:01 被阅读665次

在debug模式下的时候需要把所在的类名、方法名、行数等相关信息也打印出来,这样在开发的时候就可以快速定位调试的位置,以及当前的调试信息。对于解决bug来说,这是一个非常有效率的方法。
同时在发布模式下,我们可以不输出打印这些数据,不会造成冗余数据的产生。

先介绍一些参数:
(1) __VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
(2)__FILE__宏在预编译时会替换成当前的源文件名。
(3)__LINE__宏在预编译时会替换成当前的行号。
(4)__FUNCTION__宏在预编译时会替换成当前的函数名称。

最简单的一个例子:

#ifdef DEBUG
  #define MYLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__);
  #else
  #define MYLog(...);
  #endif

输出当前方法名

#define MYMethod(...) NSLog(@"%s", __func__);

整理

#ifdef DEBUG
  #define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
  #define DeBugLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
  #define NSLog(...) NSLog(__VA_ARGS__);
  #define MyNSLog(FORMAT, ...) fprintf(stderr,"[%s]:[line %d行] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
  #else
  #define DLog(...)
  #define DeBugLog(...)
  #define NSLog(...)
  #define MyNSLog(FORMAT, ...) nil
  #endif

相关文章

  • iOS开发中常用的宏定义

    iOS开发中常用的宏定义 尺寸宏 打印宏 替换NSLog来使用,debug模式下可以打印很多方法名,行信息。 #...

  • iOS自定义debug模式下的NSLog宏输出

    在debug模式下的时候需要把所在的类名、方法名、行数等相关信息也打印出来,这样在开发的时候就可以快速定位调试的位...

  • 自定义NSLog打印日志

    用自定义的DLog代替NSLog,在Debug模式下就会输出信息,包括方法名,行数及你想要输出的内容,但是只要切换...

  • iOS宏关闭NSLog输出

    Release版本关闭Log输出 输出更详细的调试信息 参考文章:iOS开发-使用宏自定义输出(NSLog)

  • 所谓的自定义NSLog

    自定义NSLog 在程序开发的时候,很多coder都会设置DEBUG下的定义NSLog宏。在RELESAE版本的时...

  • 自定义打印输出

    自定义打印输出#ifdef DEBUG#define HCLog(...) NSLog(__VA_ARGS__)#...

  • 自定义NSLog Use of undeclared iden

    自定义NSLog方便前期debug调试 #if DEBUG #define NSLog(FORMAT, ...) ...

  • iOS下日志记录

    iOS开发中,一般大家都会自定义一个DLog的宏来代替NSLog,用来控制Release下的Log输出。但是有以下...

  • 重写 NSLog

    重写NSLog 使用上述宏,需要build settings的macro中DEBUG设置正确。 常用输出:

  • IOS NSLog宏定义

    IOS NSLog宏定义 标签(空格分隔): IOS IOS NSLog宏定义 宏定义NSLog方法,不用加";"...

网友评论

    本文标题:iOS自定义debug模式下的NSLog宏输出

    本文链接:https://www.haomeiwen.com/subject/thtspttx.html