Ho un'applicazione multithread che è molto stabile su tutte le mie macchine di prova e sembra essere stabile per quasi tutti i miei utenti (in base a nessuna lamentela di crash). L'app si arresta spesso in modo anomalo per un utente, che è stato così gentile da inviare rapporti sugli arresti anomali. Tutte le segnalazioni di crash (~ 10 rapporti consecutivi) appaiono sostanzialmente identici:Le eccezioni "EXC_BREAKPOINT (SIGTRAP)" sono causate dal debug dei punti di interruzione?
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
(.... altro testo segue)
In primo luogo, ho trascorso molto tempo indagando [NSFont fontWithName: formato:]. Ho pensato che forse i caratteri dell'utente erano stati rovinati in qualche modo, così che [NSFont fontWithName: size:] richiedeva qualcosa di inesistente e non funzionante per quel motivo. Ho aggiunto un po 'di codice usando [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] per verificare la disponibilità dei font in anticipo. Purtroppo, queste modifiche non hanno risolto il problema.
Ora ho notato che ho dimenticato di rimuovere alcuni punti di interruzione del debug, tra cui _NSLockError, [NSException raise] e objc_exception_throw. Tuttavia, l'app è stata sicuramente creata utilizzando "Release" come configurazione di build attiva. Presumo che l'utilizzo della configurazione "Release" impedisca l'impostazione di qualsiasi punto di interruzione, ma poi di nuovo non sono sicuro di come funzionano i punti di interruzione o se il programma deve essere eseguito da gdb affinché i punti di interruzione abbiano effetto.
Le mie domande sono: potrei aver lasciato i setpoint di interruzione essere la causa dei crash osservati dall'utente? In tal caso, perché i breakpoint causerebbero un problema solo per questo utente? In caso contrario, qualcun altro ha avuto problemi simili con [NSFont fontWithName: size:]?
Probabilmente cercherò di rimuovere i punti di interruzione e di inviarlo all'utente, ma non sono sicuro di quanta moneta mi sia rimasta con quell'utente. E mi piacerebbe capire più in generale se lasciare il setpoint potrebbe causare un problema (quando l'app è costruita usando la configurazione "Release").
Wow, grazie per la risposta completa. • "Intendevi impostare i breakpoint su quelle funzioni ..." Sì, questo è ciò che intendevo. • "I breakpoint non fanno parte della build ... Esiste solo, viene colpito e interrompe il programma solo quando si esegue il programma sotto il debugger" Grazie, questo è esattamente ciò che volevo sapere. • "simbolizza il registro di arresto ... Ho scritto un'app per questo scopo" Bella app. Generalmente "simbolico" per pura intuizione - ma la tua app è un modo migliore! • Ho concluso che questo deve avere qualche tipo di problema con il font dell'utente e funzionerà su di esso da quella prospettiva. – Dennis
+1 per Symbolicator. –