我有一个多线程应用程序,该程序在所有测试机上都非常稳定,并且几乎对我的每个用户都是稳定的(基于对崩溃的抱怨)。不过,该应用程序经常会崩溃,因为一位用户足够发送崩溃报告。所有崩溃报告(约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提高]和objc_exception_throw。但是,该应用程序肯定是使用“发布”作为活动的构建配置来构建的。我假设使用“发布”配置可以防止设置任何断点-但是,我再次不确定断点是如何工作的,或者不确定是否需要从gdb中运行程序才能使断点生效。
我的问题是:我离开断点设置是否会导致用户观察到崩溃的原因?如果是这样,为什么断点仅对这个用户造成问题?如果不是,[NSFont fontWithName:size:]是否还有其他人遇到类似的问题?
我可能会尝试删除断点并发送回该用户,但是我不确定该用户剩下多少货币。而且,我想更广泛地了解设置断点是否可能导致问题(使用“发布”配置构建应用程序时)。