У мене є багатопоточна програма, яка є дуже стабільною на всіх моїх тестових машинах і, здається, є стабільною майже для кожного мого користувача (на основі скарг на збої). Додаток часто аварійно завершує роботу для одного користувача, який достатньо люб’язно надсилав звіти про збої. Усі звіти про аварії (~ 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. Однак додаток, безумовно, був побудований за допомогою "Release" як активної конфігурації збірки. Я припускаю, що використання конфігурації "Release" перешкоджає встановленню будь-яких точок зупинки, але знову ж таки я не впевнений, як саме працюють точки зупинки або чи потрібно запускати програму з gdb, щоб точки зупинки мали якийсь ефект.
Мої запитання: чи моє залишення встановлених точок зупинки може бути причиною збоїв, які спостерігає користувач? Якщо так, то чому точки зупинку створюють проблеми лише для одного користувача? Якщо ні, чи хтось ще мав подібні проблеми із [NSFont fontWithName: size:]?
Можливо, я просто спробую видалити точки зупинки та надіслати назад користувачеві, але я не впевнений, скільки валюти у мене залишилось у цього користувача. І я хотів би зрозуміти більш загально, чи залишення встановлених точок зупинення може спричинити проблему (коли додаток будується за допомогою конфігурації "Release").