你用过的 NSLog 都有哪些独特的用途?

     2023-03-05     298

关键词:

【中文标题】你用过的 NSLog 都有哪些独特的用途?【英文标题】:What are some unique uses of NSLog you have used?你用过的 NSLog 有哪些独特的用途? 【发布时间】:2009-05-23 12:42:50 【问题描述】:

您在调试时使用的 NSLog 有什么独特或特殊的用途吗?

【问题讨论】:

【参考方案1】:

我喜欢使用这种格式进行调试。

NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )

当然,您需要将其封装在您自己的方法或函数中以方便使用。我使用预处理器,并且只为我自己的使用和我发送给 beta 测试人员的特殊版本启用它。顺便说一下,这是从我对this 问题的回答中复制而来的。

#define DEBUG_MODE

#ifdef DEBUG_MODE
    #define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
    #define DebugLog( s, ... ) 
#endif

这使得DebugLog 的行为与NSLog 一样,但会显示调用它的文件名和行号:

2009-05-23 17:23:40.920 myproject[92523:10b] <AppCon.m:(8)> My debug message...

【讨论】:

你可以用这个代替前 2 行,因为 Xcode 会在构建中自动为你定义 Release:#ifndef Release。我更喜欢它,因为它只是少了一个 #define =)【参考方案2】:

我使用一些带有 NSLog 的宏来快速调试 cocoa 的 NSPointNSSizeNSRect 结构体的内容:

#define LogPoint(POINT) CMLog(@"%s: (%0.0f, %0.0f)",\
                              #POINT, POINT.x, POINT.y)

#define LogSize(SIZE) CMLog(@"%s: %0.0f x %0.0f",\
                            #SIZE, SIZE.width, SIZE.height)

#define LogRect(RECT) CMLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",\
                            #RECT, RECT.origin.x, RECT.origin.y,\
                            RECT.size.width, RECT.size.height)

这些可以按如下方式使用:

LogPoint(somePoint);
LogSize(someSize);
LogRect(someRect);

它们会产生以下输出:

somePoint: (100, 200)
someSize: 12 x 440
someRect: (120, 240) 326 x 74

【讨论】:

仅供参考,对于大多数非对象类型已经有了方便的函数:NSStringFromRect、NSStringFromPoint、NSStringFromSize、NSStringFromRange 等,所以除非你需要控制可以简化#defines 的确切格式 谢谢您,先生。我以前从未听说过这些!【参考方案3】:
NSLog(@"%s", __func__);

打印当前方法签名或函数名。

【讨论】:

【参考方案4】:

这不是 NSLog 的功能,但它与 NSLog 一起使用非常方便:您可以使用 %@ 占位符来表示对象,并且将显示它们的描述:

NSLog (@"The object is %@", someKindOfObjectWhichYouWantToDisplay);

例如,通过这种方式,您可以快速查看返回的对象。这通过向“描述”选择器发送一个对象来工作,当然,它可以在您自己的对象中实现。

【讨论】:

【参考方案5】:

这里有一个可以让您缩进调试日志的某些部分以使内容更具可读性:

// MyDebugStuff.h:
void MyLog_Indent();
void MyLog_Outdent();
void MyLog(NSString * format, ...);

// MyDebugStuff.m:
int logIndentLevel = 0;

void MyLog_Indent()   logIndentLevel++; 
void MyLog_Outdent()  if (logIndentLevel > 0)  logIndentLevel--;  

void MyLog(NSString * format, ...)

    va_list args;
    va_start(args, format);

    NSString * indentString = [[NSString stringWithString:@""]
                     stringByPaddingToLength:(2*LogIndentLevel)
                                  withString:@" "
                             startingAtIndex:0];

    NSLogv([NSString stringWithFormat:@"%@%@", indentString, format], args);

    va_end(args);

可以这样使用:

MyLog(@"Hello, world");
MyLog_Indent();
MyLog(@"Step 1");
MyLog(@"Step 2");
MyLog_Indent();
MyLog(@"Step 2a");
MyLog(@"Step 2b");
MyLog_Outdent();
MyLog(@"Step 3");
MyLog_Outdent();
MyLog(@"Goodbye, cruel world!");

并且会产生:

你好世界 第1步 第2步 步骤 2a 步骤 2b 第 3 步 再见,残酷的世界!

【讨论】:

visualstudio都有哪些好用的插件

...的时候不能跨窗口,跨文件。而且和VisualAssistant有冲突,你用了这个插件VAX的配色每次打开VS都会被重置。如果不是特别依赖Emacs的快捷键,最好不要用这个。AtomineerUtils注释工具。可以生成Doxygen等格式的注释。可以配置各种选... 查看详情

[react]在react项目中你用过哪些动画的包?

[react]在React项目中你用过哪些动画的包?react-transition-group个人简介我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,但坚持一定很酷。欢迎大家一起讨论主目录与歌谣一起通关前端面试题 查看详情

[react]你用过react版本有哪些?

[react]你用过react版本有哪些?react@17.0.2 个人简介我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,但坚持一定很酷。欢迎大家一起讨论主目录与歌谣一起通关前端面试题 查看详情

职场人士都在用的15款办公软件,有你用过的吗?

作为一名职场打工人,安装过大大小小数十种软件,踩过不少雷花不少冤枉钱,也遇到过不少小众宝藏软件。今天整理出其中最适合职场办公实用的15款神仙软件,希望大家能借助软件,提高自己的生产力࿰... 查看详情

2020软件测试工程师推荐软件测试学习工具汇总!有你用过的吗?

  有很多刚学习软件测试的小伙伴,都会在网络上找寻各种学习资料,去提升自己的专业技能水平。因此,我决定定期分享我整理收集的一些软件测试的测试工具下载、面试宝典、视频教学合集。都整理好了,有需要的可... 查看详情

这10个python机器学习库,你用过哪些?

来源:量子位1.AwkwardArray根据官方介绍,AwkwardArray用于嵌套的、大小不一的数据,包括任意长度的列表、记录、混合的类型和缺失数据,使用起来类似NumPy。看起来像是升级版的NumPy呀。果然,不同长度的数组... 查看详情

25条实用的python一行代码,你用过哪些?

自从我用Python编写第一行代码以来,就被它的简单性、出色的可读性和特别流行的一行代码所吸引。在下面,我将给大家介绍并解释一些非常实用Python一行程序。可能有些你还不知道,但对你未来的Python项目很有用。... 查看详情

5个非常有用的laravelblade指令,你用过哪些?(代码片段)

接下来我将带大家认识下五个LaravelBlade指令,这些指令将让你在解决特定问题时如虎添翼。如果你是刚接触Laravel的用户,这些小技巧能带你认识到LaravelBlade模板引擎的便捷与高效。废话少说,让我们开始吧。1.检测用户是否认证... 查看详情

.net平台下三个优秀强劲的开源项目(框架),你用过吗?

.net下的优秀开源项目很多,可能大家都有接触过。但现在给大家介绍几个我接触过的三个优秀的开源项目或框架:NopCommerce、Orchard及基础框架ABP(aspnetboilerplate)。Nopcommerce俄国开源电商系统Nopcommerce(简称Nop)属于开源电商系... 查看详情

[react]react中你用过哪些第三方的中间件

[react]react中你用过哪些第三方的中间件redux-thunk:Redux的异步处理方案,actionCreator中可以返回一个函数(即可以dispatch一个function),函数内在写异步的代码redux-saga:Redux的异步处理方案,没有破坏redux中dispatch一个plaino... 查看详情

这14种嵌入式实时系统,你用过哪些?(代码片段)

满足实时控制要求的嵌入式操作系统(RTOS)以下介绍14种主流的RTOS,分别为μClinux、μC/OS-II、eCos、FreeRTOS、mbedOS、RTX、Vxworks、QNX、NuttX,而国产的嵌入式操作系统包括都江堰操作系统(djyos)、AliosThings、HuaweiLiteOS、R... 查看详情

这14种嵌入式实时系统,你用过哪些?(代码片段)

满足实时控制要求的嵌入式操作系统(RTOS)以下介绍14种主流的RTOS,分别为μClinux、μC/OS-II、eCos、FreeRTOS、mbedOS、RTX、Vxworks、QNX、NuttX,而国产的嵌入式操作系统包括都江堰操作系统(djyos)、AliosThings、HuaweiLiteOS、R... 查看详情

盘点一些嵌入式实时系统,你用过哪些?(代码片段)

👇关注「Linux大陆」,一起进步!👇1、μClinuxμClinux是一种优秀的嵌入式Linux版本,其全称为micro-controlLinux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承... 查看详情

Firefox DevTools 都有哪些独特的功能而 Chrome DevTools 没有,反之亦然?

】FirefoxDevTools都有哪些独特的功能而ChromeDevTools没有,反之亦然?【英文标题】:WhatuniquefeaturesdotheFirefoxDevToolshavethattheChromeDevToolsdon\'thaveandviceversa?FirefoxDevTools有哪些独特的功能而ChromeDevTools没有,反之亦然?【发布时间】:2017-0... 查看详情

这几款嵌入式操作系统,你用过哪些?

原文链接点击查看鸿蒙OSHarmonyOS是一款面向全场景的开源分布式操作系统,是华为自主研发的操作系统。鸿蒙OS实现模块化耦合,可应用在不同的设备上。鸿蒙OS架构分为三层:第一层是内核第二层是基础服务第三层是... 查看详情

.net都有哪些cms?

我用过的有.netcms(名字就叫.netcms,用这个做过几个站,完全开源,原公司已经倒闭啦,用来练手还是可以的)还有we7(这个比较新了,也是开源的,不过没研究太明白)另外还有siteserver、DotNetNuke、Ludico等等。。。欢迎补充参考技术A... 查看详情

80%前端都会的es6简化代码技巧,你用过哪些?(代码片段)

点击上方“小生方勤”,选择“设为星标”第一时间关注技术干货!前言(介绍ECMAScript)最初 JavaScript 语言有2份标准:ECMA-262:主标准,由ECMA国际组织(EcmaInternational)负责管理(为了让最初的JavaSc... 查看详情

static和volatile都有哪些用途用途。

static:静态类型。在面向过程编程中,限制了变量和函数的作用域及存储域;在面向对象编程中,静态数据和函数为所有对象共有,只开辟一个存储区。volatile:通常用于直接与硬件打交道的场合,它们的值可由程序以外的过程控... 查看详情