2012-05-14 11 views
5

mia app si blocca con questo messaggio di errore:Come rintracciare la linea che sta causando un errore di runtime?

'NSInvalidArgumentException', la ragione: '- [__ NSCFDictionary setObject: Forkey:]: tentare di inserire valore nullo (tasto: 0)'

e sto cercando di scoprire dove si sta verificando nel mio codice. Ho impostato NSZombiesEnabled nelle variabili di ambiente, tuttavia è abbastanza difficile capire la posizione. Qualche idea su come eseguire il debug?

ho digitato bt e qui è quello che vedo:

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 

risposta

9

Aggiungere eccezioni come punto di interruzione. Assumendo Xcode 4 + ...

  1. Nella parte superiore del telaio del navigatore (dove si visualizzano i file e simili), si vedrà una piccola icona che appare come una freccia di lato.
  2. Questo mostrerà il navigatore del punto di interruzione. Nella parte inferiore di questa vista, fai clic su + per aggiungere un punto di interruzione.
  3. Fare clic su "Aggiungi eccezione breakpoint ..."

L'opzione predefinita è probabilmente bene ... si vuole spezzare il lancio di tutte le eccezioni.

Ora, quando si esegue, si otterrà un punto di interruzione in qualsiasi punto l'app genera un'eccezione.

+0

Ciao, ho l'eccezione in main. c'è un modo per farlo dove è successo? – Dejell

1

è l'errore accade nella vostra prova? Lo vedi dai registri degli arresti anomali di iTunes Connect?

Se è possibile riprodurlo localmente, eseguire lo scenario per duplicare l'errore e quando il debugger diventa attivo, digitare "bt" al prompt (gdb) nella console per uno stacktrace con un numero di riga.

1

Tenta di aggiungere questa parte del codice nel tuo 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; 
} 

La prossima volta si verifica l'errore, si dovrebbe avere alcune informazioni aggiuntive sul crash.

Problemi correlati