Tüm test makinelerimde çok kararlı olan ve neredeyse tüm kullanıcılarım için kararlı görünen (herhangi bir çökme şikayetine dayanmayan) çok iş parçacıklı bir uygulamam var. Uygulama, çökme raporları gönderecek kadar nazik olan bir kullanıcı için sık sık çöküyor. Tüm kilitlenme raporları (~ 10 ardışık rapor) temelde aynı görünüyor:
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
(.... daha fazla metin takip eder)
İlk olarak, [NSFont fontWithName: size:] 'i araştırmak için uzun zaman harcadım. Kullanıcının yazı tiplerinin bir şekilde bozulmuş olabileceğini düşündüm, bu yüzden [NSFont fontWithName: size:] var olmayan bir şey istiyordu ve bu nedenle başarısız oluyordu. Yazı tipi kullanılabilirliğini önceden kontrol etmek için [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] kullanarak bir sürü kod ekledim. Ne yazık ki, bu değişiklikler sorunu çözmedi.
_NSLockError, [NSException artış] ve objc_exception_throw dahil bazı hata ayıklama kesme noktalarını kaldırmayı unuttuğumu şimdi fark ettim. Ancak, uygulama kesinlikle aktif derleme yapılandırması olarak "Yayın" kullanılarak oluşturulmuştur. "Release" yapılandırmasını kullanmanın herhangi bir kesme noktasının ayarlanmasını engellediğini varsayıyorum - ancak yine de kesme noktalarının nasıl çalıştığından veya kesme noktalarının herhangi bir etkiye sahip olması için programın gdb içinden çalıştırılması gerekip gerekmediğinden tam olarak emin değilim.
Sorularım: Kullanıcı tarafından gözlemlenen çökmelerin nedeni, belirlenen kesme noktalarını bırakmış olabilir miyim? Öyleyse, neden kesme noktaları yalnızca bu tek kullanıcı için bir soruna neden olsun? Değilse, [NSFont fontWithName: size:] ile benzer sorunları olan başka kimse oldu mu?
Muhtemelen kesme noktalarını kaldırmayı ve kullanıcıya geri göndermeyi deneyeceğim, ancak o kullanıcıyla ne kadar para birimim kaldığından emin değilim. Ve daha genel olarak, kesme noktalarının bırakılmasının bir soruna neden olup olmayacağını anlamak istiyorum (uygulama "Yayın" yapılandırması kullanılarak oluşturulduğunda).