首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在DEBUG模式下启用和禁用NSLog

在DEBUG模式下启用和禁用NSLog,可以通过以下方法实现:

  1. 使用宏定义:

在项目中,可以使用宏定义来控制NSLog的输出。在DEBUG模式下,可以启用NSLog,而在RELEASE模式下,可以禁用NSLog。

在项目的.pch文件中,可以添加以下代码:

代码语言:txt
复制
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...)
#endif

这样,在DEBUG模式下,NSLog会输出日志;而在RELEASE模式下,NSLog不会输出任何日志。

  1. 使用CocoaLumberjack库:

CocoaLumberjack是一个开源的日志框架,可以通过配置来控制日志的输出。在DEBUG模式下,可以启用日志输出;而在RELEASE模式下,可以禁用日志输出。

首先,需要安装CocoaLumberjack库。可以使用CocoaPods或者手动下载并添加到项目中。

然后,在项目中配置CocoaLumberjack。在DEBUG模式下,可以使用默认配置,即启用日志输出。在RELEASE模式下,可以禁用日志输出。

代码语言:txt
复制
#ifdef DEBUG
    static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
    static const DDLogLevel ddLogLevel = DDLogLevelOff;
#endif

这样,在DEBUG模式下,CocoaLumberjack会输出日志;而在RELEASE模式下,CocoaLumberjack不会输出任何日志。

总之,在DEBUG模式下启用NSLog,可以通过宏定义或者使用第三方日志框架来实现。在RELEASE模式下禁用NSLog,可以通过配置来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使NSLogDebug模式下有效

NSLog(__VA_ARGS__)    3#else    4#define NSLog(...) {}    5#endif  就是上面的这段简单代码就可以让我们的NSLogDebug模式即开发过程中有效...,而当我们的程序处在Release模式即程序发布中NSLog将无效,这样可以减少用户使用程序的内存开销,同时也免去了我们开发过程中不断敲下NSLog并不断注释NSLog的繁琐工作。...首先将上面的代码写到头文件中,然后在你要是用NSLog的.m文件中导入头文件即可。...更简单的还可以建立一个pch文件,将头文件导入到pch文件,这样整个项目的所有文件都可以不导入头文件的情况使用上面的代码。...代码原理: 上面 的代码实际是定义了一个宏,这个宏名称恰好也是NSLog,我们在其他文件中使用的NSLog已经不再是原来的NSLog而是定义的宏NSLog,(此NSLog非彼NSLog---)。

75520

iOSDebugRelease模式编译的小尴尬Profile

凌乱了几天才发现,xcode中有个debugrelease编译模式。...DebugRelease内存分配释放方式是不同的,Debug模式内存会延迟释放,weak的对象会延迟,但Release进行了优化,所以达到释放条件会立即释放weak很重要,能解决循环引用的问题...,但使用时需要小心; 如果是weak属性,创建的对象没有变量引用而直接赋值,Release情况会立即释放,Debug会延迟释放,如果不知道这个问题,所以很难排查出原因。...ProfileAnalyze都可以Scheme中设置,把profile设置成release,就可以检查到哪里可能出现代码的静态延迟泄露。...YES:NO //这个地方动态获取缓存地址,debugrelease会有不同 } 后面构造函数中对这个bool值成员进行了初始化就好了。

3.4K70
  • Visual Studio 中断模式检查修改数据

    “寄存器”窗口 “寄存器”窗口用于显示寄存器内容,只有程序正在运行或处于中断模式时“寄存器”窗口才会显示。 为了减少混乱,“寄存器”窗口将寄存器组织成组,具体情况随平台处理器类型的不同而不同。...“监视”窗口、“快速监视”、“自动”窗口“局部变量”窗口中都可看到内存中特定位置初变量的内容,但在“内存”窗口中可看到尺寸较大的图像。...数据提示 数据提示是用于调试过程中查看程序中的变量对象的有关信息的最方便工具之一。 调试器处于中断模式时,可以在当前范围内查看变量的值,方法是将鼠标指针置于源窗口中的变量上。...激活活动计算功能的情况,“内存”窗口将“地址”表达式视为活动表达式,“地址”框中将显示表达式,程序执行时将对该表达式进行重新计算。...禁用活动计算功能的情况,“地址”表达式只会计算一次,“地址”框中始终显示表达式的结果。点击“地址”框右边的按钮,或者选择快捷菜单上单击“自动重新计算”,就可以切换“内存”窗口中的活动计算功能。

    1.7K30

    Flutter开发:iOS 14+系统的iPhonedebug模式运行App报错的解决方法

    前言 前段时间在做一个Flutter相关的App开发的时候,iPhone手机连接Mac电脑,然后运行VS Code启动Flutter程序,然后可以正常安装到手机上,但是安装之后更新了手机的系统,而且手机系统更新到最新的...iOS 14.4,然后重新打开手机里面安装的Flutter程序,然后遇到了程序启动问题,那么本文就来分析一具体原因和解决方法。...报错提示 手机系统更新到iOS 14.4以后,运行手机安装的Flutter程序,然后程序运行不起来,并提示如下信息: In iOS 14+,debug mode Flutter apps can only...分析 首先来分析一上述报错的英文,直接翻译一,翻译之后的意思如下所示: iOS 14+中,调试模式的Flutter应用程序只能从Flutter工具里面启动运行,IDEs(包括VS Code、Android...报错原因 debug模式,Flutter的热重载是把默认编译方式改为JIT,但是iOS 14系统以后,苹果系统对JIT的编译模式进行了限制,造成debug模式基于Flutter的App

    3.6K10

    webpack + vue devproduction模式的小小区别

    上周的某一天,一位同样是前端技术极度爱好的开发者朋友聊天,他提出了一个问题,他写的vue程序为什么dev模式运行良好,而在production模式就直接报错了。...马上,他回了一个更为鄙视的表情,那为什么我的dev模式能正常运行呢。我立即无语且尴尬。因为确实他的dev模式运行是正常的,只有production模式才出的问题啊。...也就是说dev模式这个this.a上是有result这个属性的,而在production模式this连这个a属性都没有了。     ...作为老鸟的我,突然想到,dev模式production模式都是运行在有sourcemap的的情况的。这很不利用我们看编译后的代码。...三、我的推理总结       通过上述分析,可以大致推理出webpackdev模式是按照commonJs模式将各个文件独立模式化加载引用,而Build之后,各个文件模块被合并成了一个,且对servcie

    1.4K20

    Face IDTouch ID 译文and集成篇Face IDTouch ID

    译文篇: Face IDTouch ID 尽可能支持生物识别。Face IDTouch ID是人们信任的安全,熟悉的身份验证方法。...如果用户启用了生物认证,您可以假定他们了解其工作原理,欣赏其方便性,并且希望尽可能使用它。请记住,人们可能会选择在其设备上禁用生物识别身份验证,因此您的应用程序应该准备好处理这种情况。 ? ?...提供替代方案,例如要求用户名密码,只有初始方法失败时才作为备用。 仅在响应用户操作时启动身份验证。明确的操作,例如点击按钮,确保用户想要进行身份验证。...脸部识别码的情况,还可以提高用户面对照相机的可能性。 始终识别身份验证方法。例如,使用Face ID登录到您的应用程序的按钮应标题为“使用Face ID登录”而不是“Touch ID登录”。...如果在系统级别启用生物特征认证,则假定用户想要使用它。如果您实施特定于应用程序的设置,用户可能会进入生物认证认证您的应用程序中被启用的状态,但在全系统范围内确实已被禁用。 ?

    3.5K60

    Flask的路由解读以及其配置

    启用/禁用调试模式 TESTING 启用/禁用测试模式 PROPAGATE_EXCEPTIONS 显式地允许或禁用异常的传播。...PRESERVE_CONTEXT_ON_EXCEPTION 默认情况,如果应用工作调试模式,请求上下文不会在异常时出栈来允许调试器内省。 这可以通过这个键来禁用。...USE_X_SENDFILE 启用/禁用 x-sendfile LOGGER_NAME 日志记录器的名称 SERVER_NAME 服务器名端口。...SQLALCHEMY_RECORD_QUERIES 可以用于显式地禁用或者启用查询记录。查询记录在调试或者测试模式下自动启用。更多信息请参阅 get_debug_queries()。...SQLALCHEMY_MAX_OVERFLOW 控制连接池达到最大值后可以创建的连接数。当这些额外的连接回收到连接池后将会被断开抛弃。

    1.2K10

    如何修复WordPress内容更新和发布失败错误

    一次性禁用所有插件可以帮助您确定哪个插件(如果有)导致了问题。然后,您可以删除、替换或更改该插件的设置以再次启用REST API。安全性能优化插件是常见的罪魁祸首。...大多数情况,插件防火墙应用程序是问题的根源,因此在那里开始故障排除尝试是明智的。 很有可能,您将能够WordPress中找到导致“发布失败”错误的工具并禁用它或更改其设置以解决问题。...步骤 3:启用调试模式以搜索错误 如果您无法使用步骤2中列出的解决方案之一重新启用REST API,您可以尝试打开WordPress的调试模式。此功能旨在临时用作故障排除工具。...激活后,调试模式会将所有PHP响应记录在站点wp-content目录中名为debug.log的文件中。...通过解决指定的错误重新启用REST API。 启用调试模式以搜索错误。 安装激活经典编辑器插件作为临时解决方案。

    5.4K30

    最基本的调试是NSLogDEBUG预处理器宏

    独特且易于查找文本模式 每个日志声明,它是有用的,包括一些独特的并且容易找到的文本模式,所以如果你确定该日志语句有问题,可以很容易地通过你的源文件搜索找到它的位置 变量属性值 你在你的应用程序关键地方打印变量属性可以验证这些值是否是允许的范围之内...在这种情况,它是添加接近的方法函数定义之初即只需打印出函数名称的声明NSLog的一个很好的主意。...记录你的堆栈信息 当检查崩溃日志,堆栈中是非常宝贵找出导致的任何特定情况的连锁事件。...Xcode里面的DEBUGXcode中DEBUG定义调试模式,预编译宏可以编译DEBUG可以让你DEBUG模式运行程序。...如果你不确定你是否定义了,可以通过打开你工程Build Setting搜索预处理,确保Debug模式DEBUG ==1。如果还没有定义,你可以手动的添加,预编译宏是区分大小写的。 ​

    1.4K30

    【Linux系统编程】Linux调试器——gdb 的基本使用

    如果大家平时写C/C++代码用的是vs的话,应该会注意到,vs上生成程序的时候就有两种模式 debugrelease的了解 两者有什么区别呢?...Debug(调试)配置: Debug 配置旨在方便开发人员代码中进行调试排查错误。... Debug 模式,编译器会生成带有调试符号信息的可执行文件,这些符号信息包含了变量名、函数名源代码行号等,以便在调试过程中能够准确地追踪错误。... Release 模式,编译器会对代码进行优化,以提高程序的执行效率性能。 由于优化的存在,生成的可执行文件可能没有调试符号信息,并且可能会合并和删除一些不必要的代码。...d(delete)+ 断点编号:删除对应的断点(注意不是行号,而是上面提到的编号) 直接d就是删除所有断点 2.3 禁用启用断点 对于断点呢还有一个比较冷门的操作,禁用启用断点: vs

    45110

    React-Native 部分组件debug模式打包在iOS真机上可以显示,但是release模式打包在iOS真机上不显示2. React-Native

    React-Native 部分组件debug模式打包在iOS真机上可以显示,但是release模式打包在iOS真机上不显示 ? 显示 ?...不显示 这个问题真的是卡了我好久,只要是打release包,下面的按钮组就是不显示,而release包又不能调试,于是我终于忍无可忍的情况,一直不能打包然后一点一点的展示页面上,来看到底是哪里的问题...包的情况是,buttons是空的,是由于if (child.type.name === 'FlowSendButton')这是判断根本不会为true,因为release模式,child.type根本没有...name这个属性,只有debug模式才有,所以这样来进行判断的 ,统统不会有true的情况,自然buttons中没有值,也就不会展示了。...也就是下面这个页面不要关,保持最前面就好了。 ?

    1.9K30

    xmake从入门到精通8:切换编译模式

    本文我们会详细介绍如何在项目构建过程中切换debug/release等常用构建模式,以及自定义其他编译模式。...releasedebug两个常用的内置规则,它们会在编译的时候附带上对应模式相关的一些编译flags,来开启优化用于发布或者调试编译。...上面的-m/--mode=参数就是用来设置编译模式,会跟mode.releasemode.debug这两个规则做关联。 那么,他们是如何关联上的呢?...被加载阶段,xmake会去判断用户对xmake f --mode=xxx的参数配置,如果通过is_mode()接口获取到是debug模式,那么会禁用相关优化并且启用符号输出。...例如,我们想在release启用调试符号,那么只需要: if is_mode("release") then set_symbols("debug") end 或者额外增加一些编译flags

    66640

    iOS各种调试技巧豪华套餐

    就是不分Debug模式Run模式的,可以说是无缝切换的,你只要没有创建断点,那么就是Run的正常模式,如果创建了断点并且运行到断点处,就自动进入Debug模式咯,不像某EC开头的IDE,控制面板就像开飞机的一样...,几万个按钮以为很强大,其实只用了RunStop,还有什么Debug模式,App模式……,果然Xcode的优越感在对比中更加强烈了,舒服到极点呀,就像夏天的海风拂过菊花,嗯是的 就是那种感觉!...建议花一点时间上手操作这些空间,并理解各自的用处。 视图层排序 再次编译运行应用程序,并点击用户界面底部的"More"标签。...属性检查器(Attributes Inspector)中,向下滚动Drawing分区并勾选Opaque。 图36 ? 启用Color Blended Layers的状态编译并运行应用程序。...想查看app如何响应事件,可按Command-T来启用slow animations,并按Command-Y来展示电话接入时的状态栏。

    1.9K90

    iOS各种调试技巧豪华套餐

    就是不分Debug模式Run模式的,可以说是无缝切换的,你只要没有创建断点,那么就是Run的正常模式,如果创建了断点并且运行到断点处,就自动进入Debug模式咯,不像某EC开头的IDE,控制面板就像开飞机的一样...,几万个按钮以为很强大,其实只用了RunStop,还有什么Debug模式,App模式……,果然Xcode的优越感在对比中更加强烈了,舒服到极点呀,就像夏天的海风拂过菊花,嗯是的 就是那种感觉!...建议花一点时间上手操作这些空间,并理解各自的用处。 视图层排序 再次编译运行应用程序,并点击用户界面底部的"More"标签。...属性检查器(Attributes Inspector)中,向下滚动Drawing分区并勾选Opaque。 图36 ? 启用Color Blended Layers的状态编译并运行应用程序。...想查看app如何响应事件,可按Command-T来启用slow animations,并按Command-Y来展示电话接入时的状态栏。

    1.4K20

    OSLog与NSLog,OSLog的实践

    不更改配置的情况,它们将被压缩并随着内存缓冲区的填充移动到数据存储区。它们会一直保留到超过存储配额,此时,最古老的消息将被清除。使用此级别捕获可能导致失败的信息。...debug 调试级别的消息只通过配置更改启用调试日志记录时在内存中捕获。根据配置的持久性设置清除它们。此级别记录的消息包含在开发期间或排除特定问题时可能有用的信息。...DDOSLogger:iOS10开始使用,将Log输出到 控制台.app Xcode控制台。跟NSLog的输出方式一致。当然,经过处理之后,性能会比直接使用NSLog要好。...而我们常用的NSLog会将日志写入到控制台.appXcode控制台。 所以,想要替换NSLog,官方推荐的做法是: iOS10及以上系统版本,使用DDOSLogger。...默认情况,log文件多次启动的时候是会重用的,24小时内将log写入到同一个文件中,当文件大小超过1MB或者创建时间超过24小时,会新生成一个log文件,后面的log会写入到新的文件中。

    1.1K20
    领券