`
woainike
  • 浏览: 79865 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

根据Debug和Release状态的变化来屏蔽日志输出

 
阅读更多

我们平时在开发应用的时候,经常会用到 NSLog 来调试我们的程序,而随着项目越来越大,这些用于调试的日志输出就会变得很难管理。 发布正式版的时候一定要屏蔽掉所有后台输出,因为这些输出还是比较消耗系统资源的。  往往到了这个时候,我们不得不去一行一行的找到 NSLog 调用,然后注释掉。 这样做在项目小的时候还比较有效,但随着项目规模的增长,就会变得越来越难控制。  下面就给大家介绍一个简单的方法,让我们在生成 Release 版本时不需要进行任何更改即可屏蔽所有的 Log 输出。

    首先我们先要定义这样一段预处理命令,文件名随便起,例如 CLog.h

    #ifdef DEBUG
    #define CLog(format, ...) NSLog(format, ## __VA_ARGS__)
    #else
    #define CLog(format, ...)
    #endif

    这里我们判断 DEBUG 这个宏是否定义,如果有定义我们就将这个 CLog 宏替换成 NSLog 调用,而如果没有定义过 DEBUG 标志我们就直接跳过。这点应该不难理解。

    检查 DEBUG 标志是否正确定义,Xcode 一般会在 debug 运行配置项里面已经定义号了DEBUG 标志,如果没定义我们就自己写上,以我的 Xcode 4 为例,如下图:

    找到 PreProcessor Macros 这个属性,对于 Debug 配置我们给他写上 DEBUG,而在 Release 配置中把它留空。 这样我们刚才那段预处理命令就可以根据这个标志来判断我们编译的时调试版本还是发布版本,从而控制 NSLog 的输出。 (因为 Xcode 4 会把 debug/release 两个配置项同时对比展现出来,而 3.x 版本的只能分别设置,如果你用的时xcode 3.x 开发工具, 那么就分别对 Debug/Release 都检查一下)。

    到了这里我们这个判断工作就都进行完了,不过这里还有一点比较麻烦,就是我们如果想实用 CLog 宏,就必须要导入 CLog.h 这个头文件。 不过 Xcode 为我们提供了一种非常巧妙的解决办法。 我们自己看一下项目里的文件,是不是有一个叫做 xxx-prefix.pch 的文件,只要注意到 pch 这个扩展名就可以了。 这个文件是做什么用的呢? 下面是一个 pch 文件的样本:

    //
    // Prefix header for all source files
    //
    #import <Availability.h>
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iPhone SDK 3.0 and later."
    #endif
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
    #endif

    这里引入了一些头文件, 其实是 Xcode 的一种预编译机制,我们在编译一个项目的时候,会有很多常用的源文件,并且这些代码文件几乎不被修改,所以 Xcode 对这些文件只在早期进行一次编译,以便我们以后的多次构建过程中反复实用。 例如这里的 UIKit 和 Foundation ,这样的机制可以加快我们每次构建项目的速度。 当然这里我们不必太深究它,知道它的作用后,我们就可以利用它来为我们的开发提供便利。 我们只需要将刚刚建立的 CLog.h 也在这里面引入一下,这样我们项目中的所有文件就都能够访问到我们刚刚定义的 CLog 宏了。 下面是完成后的 pch 文件:

    #import <Availability.h>
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iPhone SDK 3.0 and later."
    #endif
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #import "CLog.h"
    #endif

    这样,我们的 CLog 就完成了,现在可以在任何一个源文件中实用 CLog 宏来输出日志,预处理命令会自动判断当前的编译配置,如果是 Debug,就会输出日志,反之则什么都不会输出。

分享到:
评论

相关推荐

    iOS Debug和Release状态的变化来屏蔽日志输出

    本文将详细探讨如何根据iOS应用的状态变化来适当地控制日志输出。 1. **理解Debug和Release模式** - **Debug模式**:主要用于开发和测试阶段,它提供了丰富的调试工具,如断点、变量观察、内存检查等。在此模式下...

    vs开发环境Debug与Release输出路径为同一位置的配置说明

    然而,有时出于特定的需求,我们可能希望Debug和Release模式的输出文件位于同一目录下。本篇将详细介绍如何配置VS实现这一目标。 首先,我们需要对VS项目进行如下操作: 1. 在解决方案资源管理器中,选择你想要...

    CCS中Debug与Release的区别

    在IT行业的软件开发领域,尤其是针对嵌入式系统或特定硬件平台如TI的DSP(数字信号处理器)开发中,理解并正确应用CCS(Code Composer Studio)中的Debug与Release模式至关重要。CCS作为德州仪器(TI)专为DSP设计的...

    visual studio不显示Debug,Release的原因及解决办法

    在使用Visual Studio进行C++开发时,有时可能会遇到IDE不显示“Debug”和“Release”配置的情况,这对于软件开发过程中的调试和发布是至关重要的。本文将深入探讨这个问题的原因,并提供有效的解决办法。 首先,...

    VC Debug 和 Release的区别

    首先,让我们来讨论 Debug 和 Release 编译方式的本质区别。Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和...

    删除debug和release文件夹

    利用STL中的queue来存储文件夹名,实现非递归来查找指定的文件夹debug和release。 其实就是找到一个文件夹就加入文件夹队列,找到了指定文件夹debug和release就删除 当在当前文件夹已经搜索完,就让文件夹队列里的队...

    delphi debug release区别

    在Delphi编程环境中,"Debug"和"Release"是两种不同的构建配置,它们的主要区别在于编译优化、调试信息和运行效率等方面。了解这两种模式的区别对于开发者来说至关重要,因为它们在开发过程和最终产品发布中起到不同...

    关于Debug_release的区别

    Debug 和 Release 编译方式的区别 Debug 和 Release 编译方式是编程中两种基本的编译方式, Debug 版本是为了调试程序,包含调试信息,不作任何优化;Release 版本是为了发布程序,进行了各种优化,使得程序在代码...

    Debug与Release版本的区别

    Debug 和 Release 版本是两个不同的编译选项,它们的区别在于编译选项的不同。 Debug 版本包括调试信息,因此要比 Release 版本大很多。 Debug 版本用于调试,包含调试信息,不进行优化,而 Release 版本用于发布,...

    release模式正常debug模式下报错.docx

    总的来说,Debug和Release模式之间的差异主要是由于编译选项和优化策略的不同。开发者需要了解这些差异,以避免在切换模式时出现意外问题。当遇到Debug和Release模式下表现不一致的情况时,应当首先检查代码的初始化...

    Debug和release的详细区别

    理解Debug版本和Release版本之间的区别对于软件开发者来说非常重要。通过合理地利用这两个版本的特点,可以有效地提升软件产品的质量和开发效率。Debug版本专注于调试和支持,而Release版本注重于性能和用户体验。在...

    stl库在debug-release两种模式下不一致的问题

    然而,在开发过程中,程序员经常遇到一个常见问题:STL库在Debug和Release两种编译模式下的行为不一致。这主要是由于编译器为优化性能和调试便利性而采用的不同策略导致的。 1. **内存分配器的区别** 在Debug模式...

    判断DLL文件是Debug版或Release版

    在开发过程中,程序员通常会创建两种类型的DLL文件:Debug版和Release版。 Debug版的DLL文件主要用于程序调试。这种版本的DLL包含了额外的调试信息,如源代码行号、变量名以及调试符号等,这些信息可以帮助开发者在...

    删除Debug和Release文件夹 到回收站

    工作中有时会拷贝VS项目,但是VS项目bin和obj下的Debug、Release文件夹包含很多编译后的文件,这些文件通常没有必要一起拷贝。所以我就写了个小工具给VS项目瘦身。主要功能就是Winform中选择VS项目总目录,删除目录...

    Debug 和 Release 编译方式的本质区别

    ### Debug 和 Release 编译方式的本质区别 #### 一、Debug与Release编译方式概述 在软件开发领域,为了确保程序质量与效率,通常会采用两种不同的编译配置:Debug模式与Release模式。这两种模式各自拥有不同的编译...

    openssl-1.1.1 win32 debug和release库

    描述中的 "win32 debug和release库文件" 暗示了这些库是为32位Windows系统编译的,并且包括了两种编译配置:调试(debug)和发布(release)。在开发过程中,调试版本通常包含额外的信息,便于开发者追踪错误;而...

    VS2008 Debug与Release的本质区别

    Visual Studio 2008 (VS2008)作为一款流行的集成开发环境(IDE),提供了两种常见的编译配置:Debug 和 Release 版本。 **Debug版本**:主要用于程序的调试阶段。它不进行代码优化,包含调试信息,以便开发者在开发...

    Unity Debug打印日志插件,解决上线日志大量输出,影响游戏性能问题

    2. **日志级别**:允许开发者定义不同级别的日志,如调试(Debug)、信息(Info)、警告(Warning)和错误(Error),并根据需要只显示特定级别的日志。 3. **日志过滤**:根据关键字或者类名进行日志过滤,只显示...

    Visual_Studio中的debug和release版本的区别

    Visual Studio 中的 Debug 和 Release 版本的区别 在 Visual Studio 中,Debug 和 Release 版本是两种不同的编译方式,它们的主要区别在于编译选项的不同。Debug 版本通常称为调试版本,它包含调试信息,并且不作...

Global site tag (gtag.js) - Google Analytics