129

アプリがクラッシュするたびに、Xcodeはmain()関数のUIApicationMain()呼び出しをクラッシュの原因となった行として強調表示します。以前は正常だった場合もありますが(たとえば、セグメンテーションフォールト)、対処しようとしているクラッシュは、コンソールに詳細情報が記録された単純なSIGABRTです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: Date)'

Xcodeは、以前のSDKで適切な行を表示するために使用されていましたが、Xocde 4.2にアップグレードしたため、変更されました。Xcodeがクラッシュの原因を正確に知っている(または知ることができる)ことはかなり明白ですが、それでも実際の行は表示されません。これに対する修正または回避策はありますか?

4

5 に答える 5

305

また、すべての例外にブレークポイントが設定されていることを確認する必要があります。これにより、Xcodeは例外が発生している行で停止します。[Xcode4で]次の手順を実行します。

  1. Xcodeの左側にあるプロジェクトナビゲータで、ブレークポイントナビゲータをクリックします(上部のボタンバーのほぼ右側にあります。アイコンは太い右矢印のように見えます)。

  2. ナビゲーターの下部にある「+」ボタンをクリックします。

  3. 「例外ブレークポイントの追加」をクリックします。

  4. 新しいブレークポイントが作成されます。必要に応じて構成する必要がありますが、動作を微調整できます。

  5. プロジェクトを実行し、例外を再現します。

また、サードパーティのライブラリ/フレームワークにリンクしているとのことですが。これらのフレームワーク内で例外が発生している場合は、コードがコンパイルされ、Xcodeが例外の原因となった行を実際に表示できないため、苦労することになります。これが事実であり、ライブラリを正しく使用していることが確実な場合は、それらのライブラリのメンテナにバグレポートを提出する必要があります。

于 2011-10-09T12:42:21.277 に答える
28

このStackOverflowの回答の指示に従うだけです。

ゾンビを有効にする

基本的には、「ゾンビを有効にする」必要があります。次に、Xcodeは、問題の原因となった行で中断する必要があります。

ここに画像の説明を入力してください

(2017年でも、Xcodeがデフォルトでこれをオフにしていることは絶対に衝撃的です。問題の原因となった行を見たくないのはなぜですか?そして「ゾンビオブジェクトを有効にする」?!本当に?!Xcodeの作成者は本当に?これは有用な名前であり、新しい開発者にとっては意味があると思いますか?App StoreでのXcodeの評価が毎年どれほど低くなっているのか、気のめいるようです。誰も聞いていません...)

于 2016-05-02T05:17:20.920 に答える
10

現在のスキームを編集し、、、、およびを有効NSZombieEnabledMallocStackLoggingguard mallocます。次に、アプリがクラッシュしたら、gdbコンソールに次のように入力します。

(gdb) info malloc-history 0x543216

0x543216を引き起こしたオブジェクトのアドレスに置き換えてNSInvalidArgumentExceptionください。これにより、クラッシュの原因となっているコードの行を示す、はるかに便利なスタックトレースが得られるはずです。

于 2011-10-10T02:31:28.113 に答える
2

私はこの振る舞いを高度に最適化されたコードで見ました。ターゲットの最適化レベルとサードパーティのライブラリの最適化レベルを確認、調整すると役立つ場合があります。(LLVM 3.0最適化レベル設定)

デバッグシンボルを生成していますか?

于 2011-10-10T02:26:00.037 に答える
1

範囲外のインデックスのクラッシュを生成するコードを作成しました。以下は、スローされる例外です。

2017-01-07 04:02:57.606 testABC[1694:52966] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010e85cd4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010e2be21e objc_exception_throw + 48
    2   CoreFoundation                      0x000000010e8b5c2f -[__NSSingleObjectArrayI objectAtIndex:] + 111
    3   testABC                             0x000000010dce962d -[ViewController ComplexFunction] + 61
    4   testABC                             0x000000010dce95db -[ViewController thirdFunction] + 43
    5   testABC                             0x000000010dce959b -[ViewController secondFunction] + 43
    6   testABC                             0x000000010dce955b -[ViewController firstFinction] + 43
    7   testABC                             0x000000010dce96c2 -[ViewController viewDidAppear:] + 50
    8   UIKit                               0x000000010ee28a6c -[UIViewController _setViewAppearState:isAnimating:] + 945
    9   UIKit                               0x000000010ee2b7da __64-[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:]_block_invoke + 42
    10  UIKit                               0x000000010ee29ac4 -[UIViewController _executeAfterAppearanceBlock] + 86
    11  UIKit                               0x000000010ec8d77c _runAfterCACommitDeferredBlocks + 653
    12  UIKit                               0x000000010ec7a273 _cleanUpAfterCAFlushAndRunDeferredBlocks + 566
    13  UIKit                               0x000000010ec9d757 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke_2 + 194
    14  CoreFoundation                      0x000000010e8016ac __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    15  CoreFoundation                      0x000000010e7e66f4 __CFRunLoopDoBlocks + 356
    16  CoreFoundation                      0x000000010e7e5e65 __CFRunLoopRun + 901
    17  CoreFoundation                      0x000000010e7e5884 CFRunLoopRunSpecific + 420
    18  GraphicsServices                    0x00000001126d9a6f GSEventRunModal + 161
    19  UIKit                               0x000000010ec80c68 UIApplicationMain + 159
    20  testABC                             0x000000010dce99df main + 111
    21  libdyld.dylib                       0x000000011174968d start + 1
    22  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

注意深く読めばFirst Throw call stack

0   CoreFoundation              0x000000010e85cd4b __exceptionPreprocess + 171
1   libobjc.A.dylib             0x000000010e2be21e objc_exception_throw + 48

0 and 1クラッシュ後のシステムプロセスです。

 2   CoreFoundation             0x000000010e8b5c2f -[__NSSingleObjectArrayI objectAtIndex:] + 111

2例外の原因となった行です。

3   testABC                     0x000000010dce962d -[ViewController ComplexFunction] + 61

3例外がスローされたクラス名(ViewController)と関数naem( )を示します。ComplexFunction

于 2017-01-06T23:26:31.673 に答える