2012-05-14 20 views
5

Moja aplikacja jest upaść z tym komunikatem o błędzie:Jak wyśledzić linię powodującą błąd środowiska wykonawczego?

'NSInvalidArgumentException', powód: '- [__ NSCFDictionary setObject: forKey:]: wkładać do wartości zerowej (klucz: 0)'

i próbuję znaleźć, gdzie to występuje w moim kodzie. Ustawiłem NSZombiesEnabled w zmiennych środowiskowych, jednak trudno jest znaleźć lokalizację. Masz pomysł na debugowanie?

Wpisałem w bt i oto co widzę:

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 

Odpowiedz

9

Dodaj wyjątki jako punkt przerwania. Zakładając, że Xcode 4 + ...

  1. U góry ramki nawigatora (gdzie można przeglądać pliki itp.) Pojawi się mała ikona przypominająca strzałkę w bok.
  2. To pokaże nawigator punktu przerwania. U dołu tego widoku kliknij przycisk +, aby dodać punkt przerwania.
  3. Kliknij przycisk „Dodaj wyjątek przerwania ...”

Domyślną opcją jest chyba w porządku ... chcesz przerwać na rzut wszystkich wyjątków.

Teraz, po uruchomieniu, otrzymasz punkt przerwania w dowolnym miejscu, w którym aplikacja zgłasza wyjątek.

+0

Witam, otrzymuję wyjątek w głównej. czy istnieje sposób, aby to zrobić, gdzie to się stało? – Dejell

1

jest błąd dzieje się w testach? Czy widzisz to z dzienników awarii z iTunes Connect?

Jeśli można go odtworzyć lokalnie, uruchom scenariusz, aby zduplikować błąd, a gdy debuger stanie się aktywny, wpisz "bt" w wierszu polecenia (gdb) w konsoli, aby uzyskać komunikat stacktrace z numerem wiersza.

1

Spróbuj dodać ten fragment kodu w swojej AppDelegate:

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; 
} 

Następnym razem występuje Twój błąd, trzeba mieć kilka dodatkowych infos na temat katastrofy.

Powiązane problemy