6

私のアプリは次のエラーメッセージでクラッシュしています:

'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
4

3 に答える 3

11

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

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

デフォルトのオプションはおそらく問題ありません...すべての例外のスローで中断したいです。

これで、実行すると、アプリが例外をスローした場所にブレークポイントが発生します。

于 2012-05-14T00:31:31.253 に答える
1

テストでエラーが発生していますか?iTunes Connectのクラッシュログから見ていますか?

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

于 2012-05-14T00:26:54.140 に答える
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;
}

次回エラーが発生したときは、クラッシュに関する追加情報が必要です。

于 2012-05-14T00:37:18.620 に答える