iOS-NSLog打印行数/函数方法名/路径及打印数据不全

在我们iOS开发过程中,改BUG的时间甚至超过了写功能代码的时间。如何在程序代码出错时,精准定位到有问题的代码位置呢?首先我们要开启Xcode自带的全局崩溃断点All Exceptions,其次就需要灵活地使用NSLog打印功能。当然,这里不是指简单系统方法NSlog,而是指加入了行数/方法名/路径的复合打印内容。

打印行数

LINE %d 当前源码文件中的行号

打印当前函数方法名

func %s 打印当前函数名

打印当前所在路径

FILE %s 当前源码文件完整路径
我们把上述常用于打印的元素整合在一起写成一个宏定义。

#define NSLog(FORMAT, ...) fprintf(stderr,"[%s:%d行:%s] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __func__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

例如,我们在WebsiteViewController.m文件中的viewDidLoad方法中第48行打印一下当前模拟器的屏幕高度。打印结果分别对应我们上面的NSLog宏定义中的当前源码文件路径WebsiteViewController.m,当前源码文件中的行号48行,当前函数名[WebsiteViewController viewDidLoad]。
打印举例.png

【注意】开发过程中,警察会碰到某一个接口返回的数据量特别庞大的情况,而Xcode本身的打印数据量是有一定限度的。
【解决方案】在我们的.pch文件中添加另一个宏定义,在需要打印大量数据的地方使用MyLog打印数据即可。

#define MyLog(FORMAT, ...) fprintf(stderr, "%s:%zd\t%s\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String]);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,805评论 1 32
  • http://www.open-open.com/lib/view/open1390651437117.html ...
    Xtuphe阅读 5,040评论 0 10
  • 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可...
    你好自己阅读 4,642评论 0 5
  • Programmable Web 及其分类 programmable web 是基于HTTP和XML技术。 虽然H...
    daoyidao阅读 4,791评论 0 1
  • 生活中的每一天,从日出到日落 走过 路过 看过 听过。 如同骑自行车一般,保持平衡又快又稳,正确的方向正...
    悟的阅读 1,872评论 0 0