2012-02-29 38 views
7

Ứng dụng của tôi tiếp tục gặp sự cố tại một thời điểm. Nó không cho tôi biết lý do tại sao, điểm ngắt ngoại lệ xảy ra tạiỨng dụng gặp sự cố .... objc_exception_throw

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

vì vậy tôi không biết nguyên nhân gây ra sự cố. Ở phía bên tay trái, nó cho tôi biết đó là vì objc_expcetion_throw. Làm thế nào tôi có thể gỡ lỗi này? THanks

+0

Hãy thử gỡ lỗi cho đến khi nó đi đến dòng này. Xcode 4.2 có vấn đề đưa ra ngoại lệ ngay trong dòng chính của m. Không có điều đó, không ai có thể giúp bạn. Và đăng một số mã nữa. –

+0

Nếu bạn chạy ứng dụng mà không có các điểm ngắt được đặt, nó sẽ đặt một dấu vết ngăn xếp và một nguyên nhân trong nhật ký. – JeremyP

Trả lời

6

Trong các trường hợp như thế này, tôi sẽ tạo điểm ngắt vi phạm tất cả các ngoại lệ. Đây là điểm ngắt mặc định được tạo nếu bạn chỉ cần nhấp vào nút thêm trên tab điểm ngắt.

Với điểm ngắt này, XCode sẽ dừng tại điểm ngoại lệ và tôi thấy dòng mã nơi xảy ra cùng với ngăn xếp.

Tôi đã đăng hình ảnh này nhưng tôi không có đủ đại diện!

5

Sử dụng một @try/@catch:

@try { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
} 
@catch (NSException *ex) 
{ 
    // log ex... 
} 

Hoặc bạn có thể sử dụng bộ xử lý ngoại lệ còn tự do:

void uncaughtException(NSException *except) 
{ 
    // log Except 
    NSLog(@"Exception!"); 
} 

NSSetUncaughtExceptionHandler(uncaughtException); 
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

Cuối cùng, bạn luôn có thể phá vỡ vào trường hợp ngoại lệ objc:

Product->debug->create symbolic breakpoint 
Symbol: objc_exception_throw 
+0

Không hoạt động. Vẫn không có nhật ký và điểm ngắt tại cùng một địa điểm cũ: ( – 0xSina

+0

@PragmaOnce kiểm tra câu trả lời cập nhật của tôi, với 2 phương pháp gỡ lỗi mới! –

1

Làm theo lời khuyên và lời khuyên của Richard ement trình xử lý uncaughtException. Đặt điểm ngắt trong trình xử lý. Khi trường hợp ngoại lệ kích hoạt, hãy nhập điều này vào bảng điều khiển đầu ra của bạn:

po [except callStackSymbols] 

Điều đó sẽ cung cấp cho bạn thêm chi tiết về nguồn gốc của ngoại lệ.

Lưu ý: except là tên của biến ngoại lệ bạn đã sử dụng.

Các vấn đề liên quan