iOS - NSLog & debug

本文介绍如何利用NSLog函数打印函数名、行号等信息,并展示了如何打印类名、消息名及堆栈信息的方法。此外还提供了将日志输出到文件的具体步骤。

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

NSLog 是一个函数.就是一个输出方法.


它可以打印时间.工程名. 同时注意 它还可以 打印 当前的进程.



//release模式通常会定义 __OPTIMIZE__debug模式不会.

#ifndef __OPTIMIZE__

#define NSLog(...) NSLog(__VA_ARGS__)

#else

#define NSLog(...) {}

#endif





1.如何打印当前的函数和行号?

我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如:

NSLog(@"%s:%d obj=%@", __func__, __LINE__, obj);


其中__func__和__LINE__都是预编译的宏,编译时会分别替换为当前函数和当前行号。

下面是一些常用于打印日志的宏。

说明
__func__ 打印当前函数或方法,c字符串
__LINE__ 打印当前行号,整数
__FILE__ 打印当前文件路径,c字符串
__PRETTY_FUNCTION__ 打印当前函数或方法(在C++中会包含参数类型),c字符串

2如何打印一个类名,消息名,当前堆栈信息?

你可以使用以下方法在运行时动态获取这些信息。

代码 说明
NSStringFromSelector(SEL) 获取selector的名字
NSStringFromSelector(_cmd) 获取当前方法名
NSStringFromClass([object class]) 获取object的类名
[NSThread callStackSymbols] 获取当前线程的栈,是一个NSArry,包含堆栈中所有函数名。

3如何将日志打印到一个文件

可以使用freopen函数重定向标准输出和标准出错文件。因为printf函数会向标准输出(stdout)打印,而NSLog函数会向标准出错(stderr)打印。重新定向标准输出(stdout)和标准出错(stderr)到一个文件将会使他们打印日志到一个文件中。

freopen("/tmp/log.txt","a+", stdout);
freopen("/tmp/log.txt","a+", stderr);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值