У меня есть многопоточное приложение, которое очень стабильно на всех моих тестовых машинах и, похоже, стабильно для почти каждого из моих пользователей (на основе отсутствия жалоб на сбои). Приложение часто срабатывает для одного пользователя, хотя он был достаточно любезен, чтобы отправлять отчеты о сбоях. Все отчеты о сбоях (~ 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" ).