在ios iphone编程中使用封装的NSLog来打印调试信息

简介: 使用NSLog的一个风险是:它的运行会占用时间和设备资源。 简单而粗暴的解决方案是:在release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。 以release模式编译的程序不会用NSLog输出,而以debug模式编译的程序将执行NSLog的全部功能。 解决步骤: 修改<AppName&g
使用NSLog的一个风险是:它的运行会占用时间和设备资源。

简单而粗暴的解决方案是:在release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。


以release模式编译的程序不会用NSLog输出,而以debug模式编译的程序将执行NSLog的全部功能。


解决步骤:

  1. 修改<AppName>-Prefix.pch ,增加以下的宏代码
    [cpp]  view plain copy
    1. #ifdef DEBUG  
    2. # define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);  
    3. #else  
    4. # define DLog(...);  
    5. #endif  
  2. 在程序中使用DLog来替换原来的NSLog
    [cpp]  view plain copy
    1. DLog(@"当前程序目录是:%@", [self applicationDocumentsDirectory ]);  

  3. 修改项目的配置,使得在debug编译的时候,编译DLog的宏,产生详细的日志信息,而release的时候,不产生任何控制台输出
    在Other Linker Flags 中,在debug的时候,加入编译属性 -DEBUG
  4. 这样控制台会显示这样的日志信息
    [cpp]  view plain copy
    1. 2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/ÂõΩÊ≥∞ÂêõÂÆâ/Ëꕉ∏öÈÉ®ÁÆ°ÁêÜiphone/IManager/IManager/AppDelegate.m]  
    2. [函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]  
    3. [行号:37]   
    4. 当前程序目录是:/Users/roamer/Library/Application Support/iPhone Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-0C4580805368/Documents  

    补充:

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

#define DEVIDE_LINE "\n>>>> =========================================== <<<< \n"

# define MyLog(fmt, ...) NSLog((@DEVIDE_LINE "%s , " "[行号:%d] " fmt) , __FUNCTION__, __LINE__, ##__VA_ARGS__); 

#define LL_LOG(fmt, ...) MyLog(@" \n>>              LL Print                << \n " fmt DEVIDE_LINE, ##__VA_ARGS__);


目录
相关文章
|
7月前
|
存储 iOS开发
iOS 逆向编程(一)入门条件
iOS 逆向编程(一)入门条件
106 1
|
6月前
|
网络安全 开发工具 数据安全/隐私保护
如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总
如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总
|
7月前
|
Android开发 iOS开发
iOS 逆向编程(四)实操 Jailbreak 进阶必备软件
iOS 逆向编程(四)实操 Jailbreak 进阶必备软件
53 0
|
7月前
|
小程序 Android开发 iOS开发
微信小程序-虚拟支付:适用场景 / iPhone调试用支付成功,Android调用失败,提示“小程序支付能力已被限制” / “errMsg“.“requestPayment:fail banned”
微信小程序-虚拟支付:适用场景 / iPhone调试用支付成功,Android调用失败,提示“小程序支付能力已被限制” / “errMsg“.“requestPayment:fail banned”
243 0
|
2月前
|
网络安全 开发工具 数据安全/隐私保护
如何把 ipa 文件 (iOS 安装包) 安装到 iPhone 手机上? 附方法汇总
如何把 ipa 文件 (iOS 安装包) 安装到 iPhone 手机上? 附方法汇总
|
5月前
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(3)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
59 0
|
5月前
|
前端开发 数据处理 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
48 0
|
5月前
|
iOS开发 Kotlin 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
52 0
|
5月前
|
存储 缓存 前端开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
50 0
|
5月前
|
前端开发 Swift iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
94 0