iOS中打印系统详细日志

Q:如何打印当前的函数和行号?

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

1

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

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

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

宏 说明

__func__ 打印当前函数或方法,c字符串

__LINE__ 打印当前行号,整数

__FILE__ 打印当前文件路径,c字符串

__PRETTY_FUNCTION__ 打印当前函数或方法(在C++中会包含参数类型),c字符串

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

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

代码 说明

NSStringFromSelector(SEL) 获取selector的名字

NSStringFromSelector(_cmd) 获取当前方法名

NSStringFromClass([object class])获取object的类名

NSStringFromClass([AppDelegate class]));

NSThread callStackSymbols] 获取当前线程的栈,是一个NSArry,包含堆栈中所有函数名。

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

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

1

2

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

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

#define NSLog(FORMAT, ...) {\

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];\

[dateFormatter setTimeStyle:NSDateFormatterShortStyle];\

[dateFormatter setDateFormat:@"HH:mm:ss:SSSSSS"]; \

NSString *str = [dateFormatter stringFromDate:[NSDate date]];\

[dateFormatter release];\

fprintf(stderr,"[--%s--]*[--%s--]*[--%s:%d--]\n",[str UTF8String], [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__);\

}

时间: 2024-12-29 04:52:54

iOS中打印系统详细日志的相关文章

iOS中debug调试输出日志

在.pch中写: #ifdef DEBUG  // 调试阶段 #define CXSLog(...) NSLog(__VA_ARGS__) #else // 发布阶段 #define CXSLog (...) #endif iOS中debug调试输出日志,布布扣,bubuko.com

IOS中调用系统的电话、短信、邮件、浏览功能

iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评论, 收藏, 编辑 --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务目 录 短信与邮件 通讯录

Linux中的系统默认日志

/var/log/cron 记录了系统定时任务相关的日志 /var/log/cups 记录了打印信息的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,可以通过dmesg命令直接查看 /var/log/btmp 记录错误登录的日志,不能直接查看,是二进制文件,使用lastb命令查看 /var/log/lastlog 记录系统中所有用户最后一次登录时间,不能直接查看,是二进制文件,使用lastlog命令查看 /var/log/mailog 记录邮件信息 /var/log/mes

iOS 中捕获程序崩溃日志

iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作  NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);  官方文档介绍:Sets the top-level error-handling function where you can perform last-minute

IOS 中得runloop 详细解释

1.Runloop基础知识- 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触摸事件.定时器事件[NSTimer].selector事件[选择器·performSelector···]) c 节省CPU资源,提高程序性能,有事情就做事情,没事情就休息 - 1.3 重要说明 (1)如果没有Runloop,那么程序一启动就会退出,什么事情都做不了. (2)如果有了Runloop,

IOS中调用系统拨打电话发送短信

一.调用打电话界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_phoneNumber]]]; 二.发送短消息界面 调用系统的发送短信的界面,需要引入以下头文件: #import <MessageUI/MessageUI.h> 系统短信界面的调用很简单,只需下面几句代码: ? 1 2 3 4 5         

iOS中调用系统相册以及使用系统相册的照片

#import "ViewController.h" @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate> @property (nonatomic,strong)UIImageView *headImageView; @end @implementation ViewController - (void)viewDidLoad { [supe

IOS,中获取系统内存占有率的方法

#import <mach/mach.h> - (float)__getMemoryUsedPer1 { struct mach_task_basic_info info; mach_msg_type_number_t size = sizeof(info); kern_return_t kerr = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &size); if (kerr ==

iOS 中获取系统的 相册以及相机的访问权限

AVAuthorizationStatus state = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; //获取相机的访问权限 四种枚举 值. AVAuthorizationStatusNotDetermined = 0, AVAuthorizationStatusRestricted, AVAuthorizationStatusDenied, AVAuthorizationStatusAuthorize