Ich habe eine Multithread-App, die auf allen meinen Testmaschinen sehr stabil ist und für fast jeden meiner Benutzer stabil zu sein scheint (basierend auf keinen Beschwerden über Abstürze). Die App stürzt jedoch häufig für einen Benutzer ab, der so freundlich war, Absturzberichte zu senden. Alle Absturzberichte (~ 10 aufeinanderfolgende Berichte) sehen im Wesentlichen identisch aus:
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
(.... weiterer Text folgt)
Zuerst habe ich lange nach [NSFont fontWithName: size:] gesucht. Ich nahm an, dass die Schriftarten des Benutzers möglicherweise irgendwie durcheinander waren, so dass [NSFont fontWithName: size:] etwas anforderte, das nicht vorhanden war und aus diesem Grund fehlschlug. Ich habe eine Reihe von Code mit [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] hinzugefügt, um die Verfügbarkeit von Schriftarten im Voraus zu überprüfen. Leider haben diese Änderungen das Problem nicht behoben.
Ich habe jetzt bemerkt, dass ich vergessen habe, einige Debugging-Haltepunkte zu entfernen, einschließlich _NSLockError, [NSException Raise] und objc_exception_throw. Die App wurde jedoch definitiv mit "Release" als aktiver Build-Konfiguration erstellt. Ich gehe davon aus, dass die Verwendung der "Release" -Konfiguration das Setzen von Haltepunkten verhindert. Andererseits bin ich mir nicht sicher, wie Haltepunkte genau funktionieren oder ob das Programm innerhalb von gdb ausgeführt werden muss, damit Haltepunkte wirksam werden.
Meine Fragen sind: Könnte mein Verlassen der festgelegten Haltepunkte die Ursache für die vom Benutzer beobachteten Abstürze sein? Wenn ja, warum würden die Haltepunkte nur für diesen einen Benutzer ein Problem verursachen? Wenn nicht, hatte jemand andere ähnliche Probleme mit [NSFont fontWithName: size:]?
Ich werde wahrscheinlich nur versuchen, die Haltepunkte zu entfernen und an den Benutzer zurückzusenden, aber ich bin mir nicht sicher, wie viel Währung ich noch bei diesem Benutzer habe. Und ich möchte allgemeiner verstehen, ob das Verlassen der festgelegten Haltepunkte möglicherweise zu einem Problem führen kann (wenn die App mit der Konfiguration "Release" erstellt wird).