Objective-C打印调试信息

本文介绍如何在Objective-C中利用预处理器宏和Objective-C特定函数在NSLog语句中记录当前方法名和行号等上下文信息,以方便进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Objective-C调试之打印调用方法或代码所在的行号

很多开发者会有这样的疑问,在iOS开发或者MacOS开发中, 如何将上下文信息(例如当前调用方法或代码所在的行号)添加到我的打印语句中?本文小试牛刀,提供相关的信息。

我们知道,C预处理器提供了许多标准宏,可以提供有关当前文件、行号或函数的信息。另外,Objective-C有_cmd隐式参数,它给出了当前方法的选择器,以及将选择器和类转换为字符串的函数。因此我们可以在NSLog语句中使用这些方法来在调试或错误处理期间提供有用的上下文。

示例1:记录当前方法和行号的示例。将其粘贴到您的项目中,然后查看它打印的内容!

NSMutableArray *someObject = [NSMutableArray array];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
[someObject addObject:@"foo"];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);

下表列出了最常用的宏和表达式,这些宏和表达式在日志记录语句中可能很有用。

表1:预定义的宏和C/C++/Objective-C调试函数

格式说明符描述
__func__%s当前函数签名。
__LINE__%d在源代码中的所在行号
__FILE__%s所在源代码文件的全路径
__PRETTY_FUNCTION__%s类似__func__,但包含c++代码中的详细类型信息

表2:OBjective-C中的调试函数

函数名格式说明符描述
NSStringFromSelector(_cmd)%@当前选择器的名字
NSStringFromClass([self class])%@当前对象所在的类名
[[NSString stringWithUTF8String:__FILE__] lastPathComponent]%@源代码的文件名
[NSThread callStackSymbols]%@用于跟踪当前堆栈的程序员可读字符串构成的NSArray。仅用于调试,不要将其呈现给终端用户或用于在程序中执行任何逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarlen John

谢谢你给我一杯咖啡的温暖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值