zoukankan      html  css  js  c++  java
  • [ios2]iphone编程中使用封装的NSLog来打印调试信息 【转】

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

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


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


    解决步骤:

      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/ÂõΩÊ≥∞ÂêõÂÆâ/Ëꕉ∏öÈÉ®ÁưÁêÜ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__宏在预编译时会替换成当前的函数名称
  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/3141392.html
Copyright © 2011-2022 走看看