Tôi có một ứng dụng đa luồng rất ổn định trên tất cả các máy thử nghiệm của tôi và dường như ổn định đối với hầu hết mọi người dùng của tôi (dựa trên không có khiếu nại về sự cố). Tuy nhiên, ứng dụng thường xuyên gặp sự cố đối với một người dùng, người đủ tốt để gửi báo cáo sự cố. Tất cả các báo cáo sự cố (~ 10 báo cáo liên tiếp) về cơ bản trông giống hệt nhau:
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
(.... thêm văn bản sau)
Đầu tiên, tôi đã dành một thời gian dài để điều tra [NSFont fontWithName: size:]. Tôi nhận ra rằng có thể phông chữ của người dùng đã bị hỏng bằng cách nào đó, vì vậy [NSFont fontWithName: size:] đã yêu cầu một cái gì đó không tồn tại và không thành công vì lý do đó. Tôi đã thêm một loạt mã bằng cách sử dụng [[NSFontManager sharedFontManager] availableFontNamesWithTraits: NSItalicFontMask] để kiểm tra trước về tính khả dụng của phông chữ. Đáng buồn thay, những thay đổi này không khắc phục được sự cố.
Bây giờ tôi nhận thấy rằng tôi đã quên xóa một số điểm ngắt gỡ lỗi, bao gồm _NSLockError, [NSException raise] và objc_exception_throw. Tuy nhiên, ứng dụng chắc chắn được xây dựng bằng cách sử dụng "Bản phát hành" làm cấu hình bản dựng đang hoạt động. Tôi giả sử rằng việc sử dụng cấu hình "Release" ngăn cản việc thiết lập bất kỳ điểm ngắt nào - nhưng sau đó, tôi không chắc chắn chính xác cách hoạt động của các điểm ngắt hoặc liệu chương trình có cần được chạy từ bên trong gdb để các điểm ngắt có bất kỳ tác dụng nào hay không.
Câu hỏi của tôi là: việc tôi để lại các điểm ngắt có thể là nguyên nhân gây ra sự cố mà người dùng quan sát thấy không? Nếu vậy, tại sao các điểm ngắt lại gây ra sự cố chỉ cho một người dùng này? Nếu không, có ai khác gặp sự cố tương tự với [NSFont fontWithName: size:] không?
Tôi có thể sẽ chỉ thử xóa các điểm ngắt và gửi lại cho người dùng, nhưng tôi không chắc mình còn lại bao nhiêu tiền với người dùng đó. Và tôi muốn hiểu một cách tổng quát hơn liệu việc đặt các điểm ngắt có thể gây ra sự cố hay không (khi ứng dụng được tạo bằng cấu hình "Bản phát hành").