在ios iphone编程中使用封装的NSLog来打印调试信息
来源:互联网 发布:windows窗体应用程序 编辑:程序博客网 时间:2024/05/21 09:21
使用NSLog的一个风险是:它的运行会占用时间和设备资源。
简单而粗暴的解决方案是:在release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。
以release模式编译的程序不会用NSLog输出,而以debug模式编译的程序将执行NSLog的全部功能。
解决步骤:
- 修改<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
在Xcode 4.6.3 和 skd 6.1 的时候, "DEBUG"在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一个"DEBUG=1"。进行定义 - 这样控制台会显示这样的日志信息
- 2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/ÂõΩÊ≥∞ÂêõÂÆâ/Ëꕉ∏öÈÉ®ÁÆ°ÁêÜiphone/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__宏在预编译时会替换成当前的函数名称
0 0
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- (暴力调试控的福音)在ios iphone编程中使用封装的NSLog来打印调试信息
- ios iphone编程中使用封装的NSLog来打印调试信息
- iphone编程中使用封装的NSLog来打印调试信息 【转】
- [ios2]iphone编程中使用封装的NSLog来打印调试信息 【转】
- 封装NSLog打印调试信息
- 打印调试信息NSLOG
- Xcode中调试信息不全,NSLog不打印问题
- IOS 中 NSLOG 的使用
- iOS自定义NSLog来打印自己想要的东西
- ios 编程: ipad 和 iphone开发中使用 UIWebView 来播放视频的时候,在页面切换时 停止播放
- ios 编程: ipad 和 iphone开发中使用 UIWebView 来播放视频的时候,在页面切换时 停止播放
- C语言的异常机制 setjump longjump函数
- 网络编程之InetAddress
- echo命令行
- 详细的C#的编码规范
- Special Parameters之一
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- 4-2.linux的安装(VMware Tools的安装)
- Ehcache 学习笔记(一) 搭建开发环境
- Extjs jsonreader 读到数据, 但是store.getCount()==0
- 线程与进程
- Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
- 临摹的作品
- thread.sleep 与 implicitlywait 的区别
- Mac下的mysql+hibernate配置下中文问题的解决