2012-03-11 40 views
21

Có ai cho tôi biết sự khác biệt giữa NSLogDLog không?Sự khác biệt giữa NSLog và DLog

tôi tìm thấy về DLog này khi tôi đã nhìn qua mã dự án này: http://code.google.com/p/iphone-socks-proxy/

+0

DLog hết sức tò mò là gì? –

+1

http://www.google.com/search?q=DLog+vs+NSLog 989.000 kết quả. – CodaFi

+2

[Sự tiến hóa của một thay thế cho NSLog] (http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog) – vikingosegundo

Trả lời

9

NSLog là một chức năng đó là xây dựng vào khuôn khổ Quỹ mà Apple cung cấp. Tôi chưa bao giờ nghe nói về DLog, vì vậy tôi cho rằng đó là một chức năng phi tiêu chuẩn được thực hiện bởi mã bạn đang xem.

+7

'DLog' là viết tắt của 'Debug Log' (I ' m giả định) và thường là macro đánh giá thành không có gì nếu cờ môi trường 'DEBUG' bị tắt - chủ yếu là trong các ứng dụng giao hàng. –

+1

@Kurt: Ngay cả khi tôi nghĩ rằng ở nơi đầu tiên nhưng tôi không thể tìm thấy bất cứ điều gì trong dự án đó. Và đây là liên kết dự án mà tôi đang xem: http://code.google.com/p/iphone-socks-proxy/ – slonkar

+1

Được xác định trong [SocksProxy_Prefix.pch] (http://code.google.com/ p/iphone-socks-proxy/nguồn/trình duyệt/trunk/SocksProxy_Prefix.pch). –

13

DLog là macro có nghĩa là để điều kiện hóa hành vi của NSLog() trong gỡ lỗi và phát hành bản dựng. Đối với bản phát hành, bản phát hành sẽ không in được gì. NSLog() có nghĩa là in chuỗi định dạng cho bảng điều khiển.

Dưới đây là định nghĩa của nó để tham khảo:

#ifdef DEBUG 
# define DLog(...) NSLog(__VA_ARGS__) 
#else 
# define DLog(...) /* */ 
#endif 
#define ALog(...) NSLog(__VA_ARGS__) 
+5

Điều đó không đúng. 'NSLog' không có nghĩa là được sử dụng để in các chuỗi ký tự thành bàn điều khiển - cho điều đó, bạn có thể sử dụng' printf' (hoặc 'fputs') và bạn bè nếu bạn muốn. Điểm của 'NSLog' là in thông tin hữu ích và hợp lệ vào nhật ký hệ thống. –

67

DLog là một "Debug NSLog" thay thế thường được sử dụng (chỉ Google cho nó)

Đây là một bộ hoàn chỉnh các chỉ thị #define Đăng nhập (bao gồm cả ULog, một UIAlertView dựa tính năng Logging)

// DLog will output like NSLog only when the DEBUG variable is set 

#ifdef DEBUG 
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 
#else 
# define DLog(...) 
#endif 

// ALog will always output like NSLog 

#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG 
# define ULog(fmt, ...) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } 
#else 
# define ULog(...) 
#endif 

Just đặt chúng vào tệp tiêu đề biên dịch trước (.pch) của bạn.

(nguồn: http://overbythere.co.uk/blog/2012/01/alternatives-nslog)

+0

Đây là lời cảm ơn của rockin! – capikaw

+0

Xin chào dự án của tôi không có tệp PCH. Vì vậy, nơi để đặt nó? – GeneCode

+0

@Rocotilos có thể bạn đang sử dụng nhanh (vì vậy, không có tệp pch ..) – Pascal

8

Hi, Dưới cmd vĩ mô cho định dạng tập tin thay thế NSLog và cũng dưới đây tôi đã đề cập undef Macro cũng như

Định nghĩa:

#define _LOG_TO_CONSOLE_ //#undef _LOG_TO_CONSOLE_ 
#ifdef _LOG_TO_CONSOLE_ 
#define DLog(format, ...) NSLog(format, ##__VA_ARGS__) 
#else 
#define DLog(format, ...) 
#endif 
0

Tôi nghĩ rằng sự khác biệt quan trọng giữa NSLog và DLog là NSLog làm chậm quá trình thực hiện chương trình (hãy tưởng tượng quên ting để loại bỏ tất cả các cuộc gọi NSLog trong sản xuất/xuất bản), vì vậy cho mục đích gỡ lỗi DLog nên được sử dụng.

Các vấn đề liên quan