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 (en base a ninguna queja de fallas). Sin embargo, la aplicación falla frecuentemente para un usuario, quien tuvo la amabilidad de enviar informes de fallas. Todos los informes de fallos (~ 10 informes consecutivos) se ven esencialmente idénticas:¿Las excepciones "EXC_BREAKPOINT (SIGTRAP)" están causadas por la depuración de puntos de interrupción?
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
(.... más texto siguiente)
En primer lugar, pasé mucho tiempo investigando [NSFont fontWithName: Tamaño:]. Pensé que tal vez las fuentes del usuario estaban arruinadas de alguna manera, por lo que [NSFont fontWithName: size:] solicitaba algo inexistente y falla por ese motivo. Agregué un montón de código usando [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] para verificar la disponibilidad de la fuente por adelantado. Lamentablemente, estos cambios no solucionaron el problema.
He notado que olvidé eliminar algunos puntos de interrupción de la depuración, incluidos _NSLockError, [NSException raise] y objc_exception_throw. Sin embargo, la aplicación se creó definitivamente utilizando "Release" como la configuración de compilación activa. Supongo que el uso de la configuración de "Liberar" impide el establecimiento de puntos de interrupción, pero tampoco estoy seguro de cómo funcionan los puntos de interrupción ni si el programa debe ejecutarse desde gdb para que los puntos de interrupción tengan algún efecto.
Mis preguntas son: ¿podría haber dejado los puntos de ruptura establecidos ser la causa de los bloqueos observados por el usuario? Si es así, ¿por qué los puntos de interrupción causan un problema solo para este usuario? Si no, ¿alguien más ha tenido problemas similares con [NSFont fontWithName: size:]?
Probablemente solo trate de eliminar los puntos de interrupción y devolverlos al usuario, pero no estoy seguro de cuánto dinero me queda con ese usuario. Y me gustaría entender más en general si dejar los puntos de interrupción establecidos podría causar un problema (cuando la aplicación se construye utilizando la configuración de "Liberar").
Wow, gracias por la respuesta completa. • "¿Quiso decir que estableció puntos de interrupción en esas funciones ..." Sí, esto es lo que quise decir. • "Los puntos de interrupción no son parte de la compilación ... Solo existen, solo son afectados, y solo detienen tu programa cuando ejecutas tu programa bajo el depurador" Gracias, esto es exactamente lo que quería saber. • "simboliza el registro de bloqueo ... Escribí una aplicación para este fin" Bonita aplicación. En general, "simbolizo" por pura intuición, ¡pero tu aplicación es una mejor manera! • He llegado a la conclusión de que esto debe tener algún tipo de problema con la fuente del usuario y lo trabajaré desde esa perspectiva. – Dennis
+1 para Symbolicator. –