Cocoa提供了一个很方便的调试类NSLog,可以让你非常方便地查看输出、错误等内容,这样你在调试程序的时候可以方便地截获信息。
不过NSLog有时候也不怎么方便,尤其当你的程序比较大或者包括很多NSLog的时候,经常找不到哪个信息是你需要的。下面这段代码可以帮助你解决这个问题。
传统的NSLog输出时,仅仅会输出你希望显示的内容而已,并没有其他说明。
2008-04-11 14:07:09.587 MyApplication[8304:10b] message
而这个ZNLog类将其进行了扩展,用法完全一样,但是增加了如下信息:
2008-04-11 14:07:09.586 MyApplication[8304:10b] MyApp.mm:433 -[MyApp myMethod:myVariable:]; message
它会告诉你是哪个源文件,哪行调用了NSLog,这样你就可以在浩瀚的NSLog海洋中找到你需要截获的特定信息了。
这个类的源码在此,你可以直接加入到你的项目中,用法和NSLog完全一样,改成ZNLog即可。
#import <Cocoa/Cocoa.h> @interface ZNLog : NSObject {} +(void)file:(char*)sourceFile function:(char*)functionName lineNumber:(int)lineNumber format:(NSString*)format, …; #define ZNLog(s,…) [ZNLog file:__FILE__ function: (char *)__FUNCTION__ lineNumber:__LINE__ format:(s),##__VA_ARGS__] @end @implementation ZNLog + (void)file:(char*)sourceFile function:(char*)functionName lineNumber:(int)lineNumber format:(NSString*)format, … { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; va_list ap; NSString *print, *file, *function; va_start(ap,format); file = [[NSString alloc] initWithBytes: sourceFile length: strlen(sourceFile) encoding:NSUTF8StringEncoding]; function = [NSString stringWithCString: functionName]; print = [[NSString alloc] initWithFormat: format arguments: ap]; va_end(ap); NSLog(@"%@:%d %@; %@", [file lastPathComponent], lineNumber, function, print); [print release]; [file release]; [pool release]; } @end