debug 输出 以及宏定义--备
2016-02-25 23:14
316 查看
使用NSLog的一个风险是:它的运行会占用时间和设备资源。
所以在编译版本前一定不要有nslog。 同时当你的工程中有很多log 输出的时候 查找起来很不方便 ,下面介绍一种方法 可以使我们事半功倍。
解决步骤:
修改<AppName>-Prefix.pch ,增加以下的宏代码
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...);
#endif
在程序中使用DLog来替换原来的NSLog
DLog(@"当前程序目录是:%@", [self applicationDocumentsDirectory ]);
修改项目的配置,使得在debug编译的时候,编译DLog的宏,产生详细的日志信息,而release的时候,不产生任何控制台输出
在Other Linker Flags 中,在debug的时候,加入编译属性 -DEBUG
这样控制台会显示这样的日志信息
2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/hufeng/IManager/IManager/AppDelegate.m]
[函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]
[行号:37]
当前程序目录是:/Users/roamer/Library/Application Support/iPhone Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-0C4580805368/Documents
补充:
1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
所以在编译版本前一定不要有nslog。 同时当你的工程中有很多log 输出的时候 查找起来很不方便 ,下面介绍一种方法 可以使我们事半功倍。
解决步骤:
修改<AppName>-Prefix.pch ,增加以下的宏代码
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...);
#endif
在程序中使用DLog来替换原来的NSLog
DLog(@"当前程序目录是:%@", [self applicationDocumentsDirectory ]);
修改项目的配置,使得在debug编译的时候,编译DLog的宏,产生详细的日志信息,而release的时候,不产生任何控制台输出
在Other Linker Flags 中,在debug的时候,加入编译属性 -DEBUG
这样控制台会显示这样的日志信息
2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/hufeng/IManager/IManager/AppDelegate.m]
[函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]
[行号:37]
当前程序目录是:/Users/roamer/Library/Application Support/iPhone Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-0C4580805368/Documents
补充:
1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
相关文章推荐
- 如何用MFC在窗口中绘制曲线
- Sublime Text 3 安装、汉化、插件步骤详谈
- 数学背景知识课程笔记
- Matlab连接Sql server数据库
- SQLiteConnectionPool学习笔记
- UVA 679(p148)----Dropping Balls
- Python 3 之 生成器详解
- POJ 2318 TOYS(计算几何入门)
- Linux精讲——mv命令
- 2016-02-24补写
- http和https的区别
- IntelliJ Idea 常用快捷键 列表
- 从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备
- [置顶] 那些有趣的编程知识学习网站/课程
- leetcode-115-Distinct Subsequences
- ios app
- yii学习历程2-yii相关配置
- C# 5.0 使用任务调试表TaskScheduler来运行task
- 欢迎使用CSDN-markdown编辑器
- UVA 580(p331)----Critical Mass