2009-08-24 3 views
11

मुझे NSAutoreleasePool नालियों के दौरान एक क्रैश हो रहा है। संभवतः पूल उस ऑब्जेक्ट को रद्द करने की कोशिश कर रहा है जिसे कोड के दूसरे भाग द्वारा समय-समय पर रिलीज़ किया गया है। मेरे पास क्रैश objc_msgSend के बीच है क्योंकि यह किसी ऑब्जेक्ट को संदेश भेजने का प्रयास कर रहा है जो अब मौजूद नहीं है।objc_msgSend के भीतर एक क्रैश डीबग करने के लिए सबसे अच्छा कैसे है?

स्टैक स्थिति को देखते हुए, क्या टिप्स/चाल/प्रक्रिया/gdb आदेश में वस्तु के बारे में जानकारी प्राप्त करने के लिए मेरे पास आदेश है और/या जिस बिंदु पर अवैध विलोपन हुआ था?

उत्तर

16

आप एक कूबड़ है कि यह एक समय से पहले विलोपन है है, तो आपकी परिकल्पना की पुष्टि करने के लाश को सक्षम करके डिबग क्या चल रहा है। जब आप लाश को सक्षम करते हैं, तो वस्तुओं को वास्तव में नष्ट नहीं किया जाता है, लेकिन एक ज़ोंबी राज्य में सेट किया जाता है, जो आपको पता लगाने में सहायता करता है कि जब उन्हें डेलोकोक कहा जाता है तो उन्हें एक्सेस किया जाता है। दुर्घटना के इस प्रकार के बारे में अधिक NSZombieEnabled

+3

इसके अतिरिक्त, आप समय-समय पर जारी किए गए ऑब्जेक्ट की रखरखाव/रिलीज़ ईवेंट को ट्रैक करने के लिए इंस्ट्रूमेंट्स ऑब्जेक्ट ऑलोक उपकरण का उपयोग कर सकते हैं। यह ऑटोरेलीज पूल नहीं है - कृपया समस्या है, लेकिन कुछ पूर्व-कृपया, आमतौर पर। – bbum

+0

@Pang मैंने अभी लिंक अपडेट किया है। – inga

3

आप NSZombieEnabled का उपयोग करते हैं आप कम से कम पता लगा सकते हैं क्या वर्ग वस्तु है।

+2

जबकि सही, tequilatango के उत्तर कुछ उपयोगी विवरण के साथ उत्तर प्रदान करता है। – bbum

+0

काफी सच है। मैं कम से कम बाहरी जानकारी के लिए एक लिंक प्रदान कर सकता था। – Wevah

2

मैं क्या objc_msgSend में एक क्रैश होने के कारण भर में आया था। यहां तक ​​कि अजनबी क्या था application:didFinishLaunchingWithOptions: तथाकथित दुर्घटना होने से पहले भी पहुंच नहीं रहा था!

मेरे मामले में दुर्घटना निकला एक ब्रेकपाइंट कि मैं inadvertantly एक स्मृति पता है कि इससे पहले कि मेरे कोड के किसी भी भी पहुँच गया था बुलाया मिल रही थी, पर सेट किया था किया जाना है।

enter image description here

घंटे के बाद या इस पता लगाने की कोशिश की तो, मैं ब्रेकप्वाइंट अनचेक, कोड भाग गया, चेहरा करतलयुक्त और फिर मेरा दिन भी जारी नाटक यह कभी नहीं हुआ था ...

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

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