2012-05-14 31 views
5

Ứng dụng của tôi đang đâm với thông điệp này lỗi:Làm cách nào để theo dõi đường dây gây ra lỗi thời gian chạy?

'NSInvalidArgumentException', lý do: '- [__ NSCFDictionary setObject: forKey:]: tìm cách nhét các giá trị nil (key: 0)'

và tôi đang cố gắng tìm ra nơi điều này xảy ra trong mã của tôi. Tôi đã thiết lập NSZombiesEnabled trong các biến môi trường, tuy nhiên nó khá khó để tìm ra vị trí. Bất kỳ ý tưởng về cách gỡ lỗi?

tôi gõ vào BT và đây là những gì tôi thấy:

frame #0: 0x30d1832c libsystem_kernel.dylib`__pthread_kill + 8 
    frame #1: 0x3597d20e libsystem_c.dylib`pthread_kill + 54 
    frame #2: 0x3597629e libsystem_c.dylib`abort + 94 
    frame #3: 0x35055f6a libc++abi.dylib`abort_message + 46 
    frame #4: 0x3505334c libc++abi.dylib`_ZL17default_terminatev + 24 
    frame #5: 0x36c38356 libobjc.A.dylib`_objc_terminate + 146 
    frame #6: 0x350533c4 libc++abi.dylib`_ZL19safe_handler_callerPFvvE + 76 
    frame #7: 0x35053450 libc++abi.dylib`std::terminate() + 20 
    frame #8: 0x35054824 libc++abi.dylib`__cxa_rethrow + 88 
    frame #9: 0x36c382a8 libobjc.A.dylib`objc_exception_rethrow + 12 
    frame #10: 0x3428d50c CoreFoundation`CFRunLoopRunSpecific + 404 
    frame #11: 0x3428d36c CoreFoundation`CFRunLoopRunInMode + 104 
    frame #12: 0x3826f438 GraphicsServices`GSEventRunModal + 136 
    frame #13: 0x36d27cd4 UIKit`UIApplicationMain + 1080 
    frame #14: 0x00051cdc AppName`main + 80 at main.m:16 

Trả lời

9

Thêm ngoại lệ làm điểm ngắt. Giả sử Xcode 4 + ...

  1. Ở đầu khung điều hướng (nơi bạn xem tệp và như vậy), bạn sẽ thấy biểu tượng nhỏ trông giống như mũi tên ngang.
  2. Điều đó sẽ hiển thị trình điều hướng điểm ngắt. Ở cuối chế độ xem đó, nhấp vào dấu + để thêm điểm ngắt.
  3. Bấm vào "Add ngoại lệ breakpoint ..."

Các tùy chọn mặc định có lẽ là tốt ... bạn muốn phá vỡ trên ném của tất cả các trường hợp ngoại lệ.

Bây giờ, khi bạn chạy, bạn sẽ nhận được điểm dừng bất kỳ nơi nào ứng dụng của bạn ném ngoại lệ.

+0

Xin chào, tôi nhận được ngoại lệ trong chính. có cách nào để làm cho nó xảy ra không? – Dejell

1

là lỗi xảy ra trong thử nghiệm của bạn? Bạn có thấy nó từ nhật ký sự cố từ iTunes Connect không?

Nếu bạn có thể tạo lại cục bộ, hãy chạy kịch bản để sao chép lỗi và khi trình gỡ lỗi hoạt động, hãy nhập "bt" tại dấu nhắc (gdb) trong Bảng điều khiển cho ngăn xếp với số dòng.

1

Cố gắng thêm phần này của mã trong appdelegate của bạn:

void uncaughtExceptionHandler(NSException *exception); 

void uncaughtExceptionHandler(NSException *exception) { 
    NSLog(@"CRASH: %@", exception); 
    NSLog(@"Stack Trace: %@", [exception callStackSymbols]); 
} 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

// your previous code here 
    return YES; 
} 

Lần sau lỗi của bạn xảy ra, bạn nên có một số infos thêm về vụ tai nạn.

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