내 모든 테스트 컴퓨터에서 매우 안정적이고 거의 모든 사용자에게 안정적인 것처럼 보이는 다중 스레드 앱이 있습니다 (충돌에 대한 불만 사항 없음). 하지만 앱은 충돌 보고서를 보낼만큼 친절했던 한 사용자에게 자주 충돌합니다. 모든 충돌 보고서 (~ 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"구성을 사용하여 빌드 된 경우).