zoukankan      html  css  js  c++  java
  • debug 输出 以及宏定义--备

    使用NSLog的一个风险是:它的运行会占用时间和设备资源。

    所以在编译版本前一定不要有nslog。 同时当你的工程中有很多log 输出的时候 查找起来很不方便 ,下面介绍一种方法 可以使我们事半功倍。

    解决步骤:

      1. 修改<AppName>-Prefix.pch ,增加以下的宏代码
         
        1. #ifdef DEBUG  
        2. # define DLog(fmt, ...) NSLog((@"[文件名:%s] " "[函数名:%s] " "[行号:%d]  " fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);  
        3. #else  
        4. # define DLog(...);  
        5. #endif  
      2. 在程序中使用DLog来替换原来的NSLog
         
        1. DLog(@"当前程序目录是:%@", [self applicationDocumentsDirectory ]);  
      3. 修改项目的配置,使得在debug编译的时候,编译DLog的宏,产生详细的日志信息,而release的时候,不产生任何控制台输出
        在Other Linker Flags 中,在debug的时候,加入编译属性 -DEBUG
      4. 这样控制台会显示这样的日志信息

         
        1. 2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/hufeng/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__宏在预编译时会替换成当前的函数名称
  • 相关阅读:
    mysql where条件通过 regexp 正则来匹配查询数据
    mysql 面试实战
    mysql 面试
    MySQL常见面试题
    mysql面试
    Groovy安装
    Redis-(error) MISCONF Redis is configured to save RDB snapshots
    ubuntu 下openoffice安装
    Android 多屏幕适配 dp和px的关系
    linux 相关知识
  • 原文地址:https://www.cnblogs.com/isItOk/p/5218757.html
Copyright © 2011-2022 走看看