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__);\

}

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

  1. 如何在golang中打印grpc详细日志

    最近捣鼓fabric,在一个tls证书问题上纠结挺久,连接orderer服务时候,grpc日志总是冷冰冰的显示这个信息 Orderer Client Status Code: (2) CONNECTI ...

  2. iOS 中捕获程序崩溃日志

    iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼     iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...

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

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  4. Linux中的系统默认日志

    /var/log/cron 记录了系统定时任务相关的日志 /var/log/cups 记录了打印信息的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,可以通过dmesg命令直接查 ...

  5. iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59)

    http://blog.sina.com.cn/s/blog_b71d24920101ky2d.html iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软 ...

  6. IOS中UIScrollView的详细使用

    UIScrollView 是可以滚动的View 要想让UIScrollView可以滚动,必须设置UIScrollView的contentSize contentSize : 表示UIScrollVie ...

  7. IOS 中得runloop 详细解释

    1.Runloop基础知识- 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触 ...

  8. iOS中获取系统相册中的图片

    一.获取单张图片 思路: 1.利用UIImagePickerController可以从系统自带的App(照片\相机)中获得图片 2.设置代理,遵守代理协议 注意这个UIImagePickerContr ...

  9. 关于ios中得路径详细讲解

    利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references fo ...

随机推荐

  1. glsl-BufferObject- change

    修改其值的最快方式: 创建: Mutable Storage To create mutable storage for a buffer object, you use this API: void ...

  2. HTML页面规范

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Hdu 5213-Lucky 莫队,容斥原理,分块

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5213 Lucky Time Limit: 6000/3000 MS (Java/Others)    Me ...

  4. linux ant 解决 错误: 找不到或无法加载主类 org.apache.tools.ant.launch.Launcher

    在使用ant进行java程序编译的时候出错.错误提示: Error: Could not find or load main class org.apache.tools.ant.launch.Lau ...

  5. DIY常用网站

    工作: 技术: 学习: 个人十佳博客介绍:http://hedengcheng.com/?p=676

  6. The server does not support version 3.1 of the JEE Web module specification.

    使用MyEclipse2015打开MyEclipse2014编辑的项目,在服务器Tomcat 7部署时,提示"The server does not support version 3.1 ...

  7. RestService中的 get post put delete

    HTTP 定义了与服务器交互的不同方法,最基本的有四种方法:GET,POST,PUT,DELETE.URL即资源描述符,我们可以这样认为:一个URL地址, 用于描述一个网络上的资源,而HTTP中的GE ...

  8. spring使用ehcache

    spring本身内置了对Cache的支持,之前记录的是基于Java API的ConcurrentMap的CacheManager配置,现使用ehcache实现. 1.声明对cache的支持 <b ...

  9. 一步一步学android控件(之二十五)—— SeekBar

    SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...

  10. struts2 表单处理

    在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...