मेरे पास एक मल्टीथ्रेडेड ऐप है जो मेरे सभी परीक्षण मशीनों पर बहुत स्थिर है और मेरे लगभग हर उपयोगकर्ता (क्रैश की कोई शिकायत के आधार पर) के लिए स्थिर लगता है। ऐप एक उपयोगकर्ता के लिए अक्सर क्रैश हो जाता है, हालांकि, जो क्रैश रिपोर्ट भेजने के लिए पर्याप्त था। सभी क्रैश रिपोर्ट (~ 10 लगातार रिपोर्ट) अनिवार्य रूप से समान दिखती हैं:
Date/Time: 2010-04-06 11:44:56.106 -0700
OS Version: Mac OS X 10.6.3 (10D573)
Report Version: 6
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.apple.CoreFoundation 0x90ab98d4 __CFBasicHashRehash + 3348
1 com.apple.CoreFoundation 0x90adf610 CFBasicHashRemoveValue + 1264
2 com.apple.CoreText 0x94e0069c TCFMutableSet::Intersect(__CFSet const*) const + 126
3 com.apple.CoreText 0x94dfe465 TDescriptorSource::CopyMandatoryMatchableRequest(__CFDictionary const*, __CFSet const*) + 115
4 com.apple.CoreText 0x94dfdda6 TDescriptorSource::CopyDescriptorsForRequest(__CFDictionary const*, __CFSet const*, long (*)(void const*, void const*, void*), void*, unsigned long) const + 40
5 com.apple.CoreText 0x94e00377 TDescriptor::CreateMatchingDescriptors(__CFSet const*, unsigned long) const + 135
6 com.apple.AppKit 0x961f5952 __NSFontFactoryWithName + 904
7 com.apple.AppKit 0x961f54f0 +[NSFont fontWithName:size:] + 39
(.... अधिक पाठ इस प्रकार है)
सबसे पहले, मैंने लंबे समय तक [NSFont fontWithName: size:] की छानबीन की। मुझे लगा कि शायद उपयोगकर्ता के फ़ॉन्ट किसी तरह खराब हो गए हैं, इसलिए [NSFont fontWithName: size:] कुछ गैर-मौजूद और उस कारण से असफल होने का अनुरोध कर रहा था। मैंने पहले से फ़ॉन्ट उपलब्धता की जांच करने के लिए [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] का उपयोग करके कोड का एक गुच्छा जोड़ा। अफसोस की बात है कि इन बदलावों ने समस्या को ठीक नहीं किया।
अब मैंने देखा है कि मैं कुछ डिबगिंग ब्रेकप्वाइंट्स को हटाना भूल गया, जिनमें _NSLockError, [NSException raise], और objc_exception_throw शामिल हैं। हालाँकि, सक्रिय बिल्ड कॉन्फ़िगरेशन के रूप में "रिलीज़" का उपयोग करके ऐप निश्चित रूप से बनाया गया था। मुझे लगता है कि "रिलीज़" कॉन्फ़िगरेशन का उपयोग किसी भी ब्रेकप्वाइंट की स्थापना को रोकता है - लेकिन फिर मुझे यकीन नहीं है कि ब्रेकपॉइंट कैसे काम करते हैं या क्या ब्रेकपॉइंट के लिए प्रोग्राम को चलाने के लिए ब्रेकडाउन के लिए कोई प्रभाव पड़ता है या नहीं।
मेरे प्रश्न हैं: क्या मेरे द्वारा छोड़े गए ब्रेकपॉइंट सेट उपयोगकर्ता द्वारा देखे गए क्रैश का कारण हो सकते हैं? यदि हां, तो ब्रेकपॉइंट केवल इस एक उपयोगकर्ता के लिए समस्या का कारण क्यों होगा? यदि नहीं, तो [NSFont fontWithName: size:] के साथ किसी और को भी ऐसी ही समस्या थी?
मैं शायद केवल ब्रेकपॉइंट को हटाने और उपयोगकर्ता को वापस भेजने की कोशिश करूंगा, लेकिन मुझे यकीन नहीं है कि मैंने उस उपयोगकर्ता के पास कितनी मुद्रा छोड़ दी है। और मैं आम तौर पर यह समझना चाहता हूं कि क्या ब्रेकपॉइंट सेट छोड़ने से संभवतः एक समस्या पैदा हो सकती है (जब "रिलीज़" कॉन्फ़िगरेशन का उपयोग करके ऐप बनाया गया है)।