0

無駄なスタック

この例外に対処する方法を誰か教えてもらえますか? デバッガーは例外ブレークポイントにあり、ご覧のとおり、例外に関する実用的な情報はないようです。どこで発生しましたか?それが私のコードに含まれていないことは確かですが、続行する方法について途方に暮れています...

助けてくれてありがとう。

編集1: コンソールの内容は次のとおりです

* キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '* -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています'

***最初のスローコールスタック:(0x30ce188f 0x3627e259 0x30c2a9db 0x8d029 0x915c5 0x35723c59 0x35725ee7

編集2: これがバックトレースです

スレッド #1: tid = 0x1c03、0x3627e238 libobjc.A.dylib`objc_exception_throw、停止理由 = ブレークポイント 1.1

フレーム #0: 0x3627e238 libobjc.A.dylib`objc_exception_throw

フレーム #1: 0x30c2a9da CoreFoundation`-[__NSArrayM objectAtIndex:] + 270

編集 3 (ソリューション): main() アプローチを使用したバックトレースは次のとおりです。

2012-08-31 10:27:21.489 <>[820:707] キャッチされない例外 *** -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています

2012-08-31 10:27:32.908 <>[820:707] スタック トレース: (

0   CoreFoundation                      0x30ce18a7 __exceptionPreprocess + 186
1   libobjc.A.dylib                     0x3627e259 objc_exception_throw + 32
2   CoreFoundation                      0x30c2a9db -[__NSArrayM objectAtIndex:] + 270
3   <>                                  0x00050ed1 __55-[SFSummaryCard retrieveAndDisplayFirstImageForString:]_block_invoke_0 + 148
4   <>                                  0x0005546d __block_global_1 + 40
5   libdispatch.dylib                   0x35723c59 _dispatch_call_block_and_release + 12
6   libdispatch.dylib                   0x35725ee7 _dispatch_main_queue_callback_4CF$VARIANT$mp + 194
7   CoreFoundation                      0x30cb42ad __CFRunLoopRun + 1268
8   CoreFoundation                      0x30c374a5 CFRunLoopRunSpecific + 300
9   CoreFoundation                      0x30c3736d CFRunLoopRunInMode + 104
10  GraphicsServices                    0x36ffb439 GSEventRunModal + 136
11  UIKit                               0x32917cd5 UIApplicationMain + 1080
12  <>                                  0x00036c01 main + 220
13  <>                                  0x00036b20 start + 40

)

重要な要素は次のとおりです。retrieveAndDisplayFirstImageForString()

4

4 に答える 4

8

Xcode 4/iOS 5 では、エミュレータの疑似 OS の明らかなバグにより、エミュレータで例外のトレースバックが得られない場合があるという問題があります。main解決策は、次の行に沿って、に明示的なトレースバックを追加することです

@try {
    retVal = UIApplicationMain...
}
@catch (NSException* exception) {
    NSLog(@"Uncaught exception %@", exception);
    NSLog(@"Stack trace: %@", [exception callStackSymbols]);
}
于 2012-08-31T16:58:50.030 に答える
2

コンソールで例外ブレークポイントの印刷バックトレースを作成できます。

例:

-(void)backtraceTest
{
    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
    id obj = [array objectAtIndex:3]; // out of bounds
    NSLog(@"%@", obj);
}

このバックトレースを提供します:

バックトレースの例

HelloWorldLayer.m ファイルの 34 行目で、NSArray の objectAtIndex メソッドが呼び出され、例外が発生したことがわかります。

于 2012-08-31T07:49:54.650 に答える
1

これは関連しています:

http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/

バックトレースを表示する「例外ブレークポイント」を追加できます。すべてのプロジェクトに表示される「ユーザー ブレークポイント」に移動できます。

このトリックをもっと早く習得していればよかったのに。

于 2013-02-14T14:40:15.217 に答える
0

回避策で解決できました:

  1. 開いているすべてのアプリケーションを閉じました
  2. ファインダーを再起動する
  3. sudo find / -name ".DS_Store" -exec rm {} \; を実行します。
  4. これにより、コンピューター上のすべての .DS_Store 古いファイルが削除されます
  5. ファインダーを起動し、次のようにデフォルト ビューを「リストビュー」に設定します
  6. 問題のあるアプリケーションを再実行すると、ファイル チューザーが機能します
于 2013-12-21T05:17:11.427 に答える