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