Tengo una aplicación multiproceso que es muy estable en todas mis máquinas de prueba y parece ser estable para casi todos mis usuarios (basado en que no hay quejas de fallas). Sin embargo, la aplicación se bloquea con frecuencia para un usuario, que tuvo la amabilidad de enviar informes de bloqueo. Todos los informes de fallos (~ 10 informes consecutivos) parecen esencialmente idénticos:
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
(... sigue más texto)
Primero, pasé mucho tiempo investigando [NSFont fontWithName: size:]. Pensé que tal vez las fuentes del usuario estaban estropeadas de alguna manera, por lo que [NSFont fontWithName: size:] estaba solicitando algo que no existía y fallaba por esa razón. Agregué un montón de código usando [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] para verificar la disponibilidad de fuentes por adelantado. Lamentablemente, estos cambios no solucionaron el problema.
Ahora me he dado cuenta de que olvidé eliminar algunos puntos de interrupción de depuración, incluidos _NSLockError, [NSException raise] y objc_exception_throw. Sin embargo, la aplicación definitivamente se creó utilizando "Release" como configuración de compilación activa. Supongo que el uso de la configuración "Release" evita la configuración de puntos de interrupción, pero, de nuevo, no estoy seguro de cómo funcionan exactamente los puntos de interrupción o si el programa debe ejecutarse desde gdb para que los puntos de interrupción tengan algún efecto.
Mis preguntas son: ¿el haber dejado los breakpoints establecidos podría ser la causa de las caídas observadas por el usuario? Si es así, ¿por qué los puntos de interrupción causarían un problema solo para este usuario? Si no es así, ¿alguien más ha tenido problemas similares con [NSFont fontWithName: size:]?
Probablemente solo intentaré eliminar los puntos de interrupción y enviar de vuelta al usuario, pero no estoy seguro de cuánta moneda me queda con ese usuario. Y me gustaría entender de manera más general si dejar los puntos de interrupción establecidos podría causar un problema (cuando la aplicación se crea con la configuración de "Versión").