2012-05-14 9 views
5

私のアプリは、このエラーメッセージを表示してクラッシュさ:ランタイムエラーの原因となっている行を追跡するには?

'NSInvalidArgumentException'、理由: ' - [__ NSCFDictionaryのsetObject:forKey:]:nilの値を挿入しようとする(キー:0')

私はこれがどこで発生しているのかを私のコードで見つけようとしています。私は環境変数にNSZombiesEnabledを設定しましたが、場所を特定するのはかなり難しいです。どのようにデバッグする上の任意のアイデア?

私はBTで入力し、ここで私が見たものです。

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 

答えて

9

例外をブレークポイントとして追加します。 ...

  1. ナビゲータフレームの上部(ファイルなどを見る)には、横向きの矢印のような小さなアイコンが表示されます。
  2. これは、ブレークポイントナビゲータを表示します。そのビューの一番下にある+をクリックしてブレークポイントを追加します。
  3. 「例外ブレークポイントを追加...」

をクリックすると、デフォルトのオプションを使用すると、すべての例外のスローでブレークしたい...おそらく大丈夫です。

実行すると、アプリが例外をスローする場所であればどこにでもブレークポイントが設定されます。

+0

こんにちは、私はメインの例外を取得します。それが起こった場所を手に入れる方法はありますか? – Dejell

1

は、あなたのテストで何が起こっ誤りですか?あなたはiTunes Connectからのクラッシュログからそれを見ていますか?

シナリオを実行してエラーを複製し、デバッガがアクティブになったら、コンソールの(gdb)プロンプトに「bt」と入力して、回線番号のスタックトレースを取得します。

1

あなたの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; 
} 

あなたのエラーが発生する次の時間、あなたはクラッシュにいくつかの追加に関する情報を持っている必要があります。

関連する問題