2010-05-06 20 views
5

मैंने एक डीबग मैक्रो लिखा है जो वैश्विक kDebug ध्वज == YES जब भी पारित स्ट्रिंग को कंसोल पर प्रिंट करता है।प्रत्येक बार किसी भी विधि को कॉल करने के लिए मैक्रो को कॉल करें - उद्देश्य सी

जब भी किसी विधि को बुलाया जाता है तो मुझे किसी विधि और उसके वर्ग का नाम प्रिंट करने की आवश्यकता होती है।

यह ठीक काम करता है जब मैं हर तरीके से दर्द से गुजरता हूं और कक्षा का नाम और स्ट्रिंग में विधि लिखता हूं।

क्या कोई विशेष हैंडलर है जिसे ऑब्जेक्टिव-सी में किसी भी विधि के रूप में बुलाया जाता है, और यदि ऐसा है, तो क्या कोई तरीका है कि मैं इसे किसी भी तरह से अपने डीबग मैक्रो को कॉल करने के लिए ओवरराइड कर सकता हूं?

इसका पूरा उद्देश्य यह है कि मुझे अपने कोड में हर विधि और हाथ-कोड को डीबग मैक्रो कॉल में विधि हस्ताक्षर से गुज़रना पड़ेगा।

उत्तर

6

यदि आप स्वयं को बनाने के बजाए एक विधि लॉगिंग सुविधा की तलाश में हैं, तो वास्तव में उद्देश्य-सी रनटाइम में बनाया गया है।

आप एप्पल के Technote 2124 के ऑब्जेक्टिव-सी खंड पर भी पढ़ सकते हैं: Technical Note TN2124: Mac OS X Debugging Magic

मैं भी संदेशों का पता लगाने के लिए क्रम की सुविधा का उपयोग कर के बारे में डेव Dribin के ब्लॉग पोस्टिंग से अधिक पढ़ने की सिफारिश करेंगे। आप इसे यहां देख सकते हैं: Tracing Objective-C messages - Dave Dribin's Blog। डेव logObjCMessageSend फ़ंक्शन को नोट करता है जिसे कॉल किया जाता है, जिसे आप अपने लॉगिंग व्यवहार को कस्टमाइज़ करने के लिए उपयोग कर सकते हैं। इसका उपयोग करना थोड़ा मुश्किल है, लेकिन डेव सफलतापूर्वक इसका उपयोग करने के लिए आवश्यक जानकारी देता है।

+0

आप सरल कोड के साथ व्याख्या कर सकते हैं के बाद? – Shamsiddin

4

Dtrace पर एक नज़र डालें। Instruments एक जीयूआई इंटरफ़ेस प्रदान करता है। आप उन सभी विधियों से मेल खाने के लिए रेगेक्स प्रदान कर सकते हैं, जिन्हें आप लॉग करना चाहते हैं।

0

लगता है जैसे आप __PRETTY_FUNCTION__ मैक्रो की तलाश में थे ... लेकिन स्वीकार्य उत्तर शायद जाने का एक बेहतर तरीका है।

0

मैं इस कोड के साथ समाप्त हो गया है, यहाँ एक ऐसी ही सवाल पूछने How can I log names of each called class method in Objective-C?

- (BOOL)respondsToSelector:(SEL)aSelector { 
    if(aSelector){ 
     NSLog(@"%@", NSStringFromSelector(aSelector)); 
    } 
    return [super respondsToSelector:aSelector]; 
} 
संबंधित मुद्दे