2011-11-28 12 views
42

मैंने एएलटी + सीएमडी + आर दबाया और सक्रिय एनएसजेम्बी एन्क्रिप्टेड> पर्यावरण चर में सक्रिय किया। इसके अतिरिक्त, मैंने इसे डायग्नोस्टिक्स> मेमोरी मैनेजमेंट> ज़ोंबी ऑब्जेक्ट्स सक्षम करें में सक्रिय किया।एक्सकोड 4 में "हटाए गए संदेश को भेजे गए संदेश" को डीबग कैसे करें?

हालांकि, जब मैं बनाया गया है और चलाने के लिए, कुछ बिंदु पर मेरी ऐप्लिकेशन क्रैश मुझे कंसोल में इस बेकार संदेश दे रही है:

*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260 

स्टैक ट्रेस बस के रूप में बेकार है। मैंने विवरण-स्तर स्लाइडर को दाईं ओर सभी तरह से स्थानांतरित कर दिया। थ्रेड 1 बस मुझे पता चलता है:

screenshot

सब कुछ प्रणाली के स्वामित्व वाली है और वहाँ एक भी मेरी ऐप्लिकेशन से संबंधित लाइन नहीं है। तो स्पष्ट रूप से NSZombiesEnabled काम नहीं करता है क्योंकि यह एक्सकोड 3 में किया गया था, जहां यह मृत वस्तु पर रुक गया था।

क्या पता लगाने का कोई तरीका है कैलियर बहुत जल्दी हटा दिया गया है?

अद्यतन: तो निर्माण और चलाने के बाद लगभग 100 बार अचानक समस्या खराब हो गई! यह पूरी तरह से चला गया है! और सबसे अच्छा हिस्सा: मैंने किसी भी तरह से अपना कोड संशोधित नहीं किया! इसके बाद मैंने कई बार क्लीन कमांड के साथ बिल्ड फ़ोल्डर और प्रोजेक्ट को साफ़ किया और सिम्युलेटर में ऐप को कई बार हटा दिया।

अपडेट 2: सौभाग्य से समस्या फिर से दिखाई दी। और अब यह लगातार लगता है। सौभाग्य से, क्योंकि मैं यादृच्छिक रूप से उपयोगकर्ताओं को परेशान करने के बजाए मूल कारण ढूंढना पसंद करता हूं।

अपडेट 3: अंत में दुर्घटना से यह पाया:

startButton = newBttn; 

किया जाना चाहिए था:

self.startButton = newBttn; 

startButton एक बनाए रखने की संपत्ति थी और -dealloc में मैं इसे जारी किया। इसलिए यह अधिक हो गया और अधिकांश (लेकिन सभी नहीं) मामलों में दृश्य के बाद फीका हुआ यह अजीब कैलियर को बनाए रखने का संदेश देता है।

लाश इंस्ट्रूमेंट (सीएमडी + आई) ने आखिरकार बताया कि उसे एक बटन के साथ करना था। बस नहीं पता था कि क्यों और कहाँ।

क्लैंग स्टेटिक विश्लेषक इस स्पष्ट गड़बड़ी के बारे में शिकायत नहीं करता था।

+0

कोई भी बग बस "स्वयं को ठीक नहीं करता"। यह संभवतः एक सहमति से संबंधित स्वामित्व मुद्दा है और आपके कोड में अभी भी मौजूद है। एक टिकिंग टाइम बम, यदि आप करेंगे। अपने जूते में, मैं एक कोर एनीमेशन आधारित संसाधनों का प्रबंधन कैसे कर रहा हूं, इस पर एक बहुत कठिन लग रहा हूं ... – bbum

+0

कोर एनीमेशन आधारित संसाधनों से आपका क्या मतलब है? – dontWatchMyProfile

+0

स्क्रीन पर गंक डालने से संबंधित कुछ भी। यदि आप cocos2d पर मुकदमा कर रहे हैं, तो आपको उसमें संसाधनों के अपने प्रबंधन की समीक्षा करने की आवश्यकता होगी क्योंकि यह अप्रत्यक्ष रूप से सीए * संसाधनों का प्रबंधन करता है। – bbum

उत्तर

88

यदि यह फिर से फसलें हैं, तो आप एक समर्पित लाश उपकरण चला सकते हैं। ऐप को प्रोफाइल करने के लिए कमांड + I दबाएं और लाश उपकरण का चयन करें (आपको सिम्युलेटर पर चलना चाहिए)। यदि आपको ज़ोंबी मिलती है, तो आप उस ऑब्जेक्ट के लिए संपूर्ण मेमोरी इतिहास (प्रत्येक को बनाए रखने/रिलीज़) प्रदर्शित कर सकते हैं, जो त्रुटियों को ट्रैक करने में बेहद सहायक है।

+0

ग्रेट टूल! धन्यवाद! यद्यपि यह अब एक बेहतर स्टैक ट्रेस दिखाता है, लेकिन मैं यह नहीं समझ सकता कि कौन सा UIView उस कैलियर ज़ोंबी का मालिक है। क्या आप एक अच्छा संसाधन बता सकते हैं जो दिखाता है कि इस तरह के मामले में उस उपकरण का उपयोग कैसे करें? – dontWatchMyProfile

+0

महान, महान उत्तर, धन्यवाद – Sam

+0

यह सिर्फ मेरा दिन बना दिया। मुझे नहीं पता था कि आप इस तरह एक ऐप प्रोफाइल कर सकते हैं। आपको पता नहीं है कि मैं अभी कितना खुश हूं। – shulmey

46

जेफ के महान उत्तर के अतिरिक्त; लगभग एक ही काम करने के लिए, लेकिन उपकरण खोलने या अपनी ऐप को प्रोफाइल किए बिना, आप NSZombieEnabled, MallocStackLogging, और guard malloc डीबगर में सेट कर सकते हैं। तब, जब आपका ऐप्स क्रैश, gdb कंसोल में इस टाइप करें:

(gdb) info malloc-history 0x543216 

उद्देश्य यह है कि दुर्घटना का कारण बना के पते के साथ 0x543216 बदलें, और आप एक अधिक उपयोगी स्टैक ट्रेस मिल जाएगा और यह आपको पहचानने में मदद चाहिए समस्या का कारण बनने वाले आपके कोड में सटीक रेखा।

This article has some additional infoz.

+0

मुझे लगता है कि लाश उपकरण मूल रूप से इस सटीक प्रक्रिया के आसपास एक जीयूआई रैपर है - यह सिर्फ आपके लिए कुछ गंदे काम को संभालता है। – Olie

+12

दुर्भाग्य lldb – Chris

+20

FYI करें के साथ इस काम नहीं करता है: LLDB डिबगर के साथ आप के रूप में यह कर सकते हैं इस प्रकार है: (lldb) स्क्रिप्ट आयात lldb.macosx.heap (lldb) malloc_info --stack-इतिहास 0x7c506a00 – Ron

संबंधित मुद्दे

 संबंधित मुद्दे