background image

5

这样控制台会显示这样的日志信息

1

2011-12-27 22:23:53.303 IManager[5449:b603] [文件

:/Users/roamer/Project/国泰君安/营

‰∏öÈÉ®ÁÆ°ÁêÜiphone/IManager/IManager/AppDelegate.m]  

2

[函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]  

3

[行号:37]   

4

当前程序目录是:

/Users/roamer/Library/Application Support/iPhone 

Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-
0C4580805368/Documents  

补充:

6

  

1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的

宏是新的

C99 规范中新增的,目前似乎只有 gcc 支持(VC6.0 的编译器不支持)。宏前

面加上

##的作用在于,当可变参数的个数为 0 时,这里的##起到把前面多余的","去掉

的作用

,否则会编译出错, 你可以试试。

  

2) __FILE__ 宏在预编译时会替换成当前的源文件名

  

3) __LINE__宏在预编译时会替换成当前的行号

  

4) __FUNCTION__宏在预编译时会替换成当前的函数名称

Objective-c 开发程序的时候,有专门的日志操作类 NSLog,它将指定的输出,输出到

stderr),我们可以利用 Xcode 的日志输出窗口,那么既然是要记录到具体日志文件,我们

就想输出日志写入到具体的日志文件即可。
 
代码
1、  宏定义(下面是我在程序中常用到的日志宏,用 DEBUG 开关管理,
也就是说只有在

DEBUG 模式下才让日志输出 :)

 
#ifdef DEBUG 
#  define LOG(fmt, ...) do {                                            / 
        NSString* file = [[NSString alloc] initWithFormat:@"%s", __FILE__]; / 
        NSLog((@"%@(%d) " fmt), [file lastPathComponent], __LINE__, ##__VA_ARGS__); / 
        [file release];                                                 / 
    } while(0) 
#  define LOG_METHOD NSLog(@"%s", __func__) 
#  define LOG_CMETHOD NSLog(@"%@/%@", NSStringFromClass([self class]), 
NSStringFromSelector(_cmd)) 
#  define COUNT(p) NSLog(@"%s(%d): count = %d/n", __func__, __LINE__, [p retainCount]); 
#  define LOG_TRACE(x) do {printf x; putchar('/n'); fflush(stdout);} while (0)