13

Xcode4.3.1を使用しています。デバイスでクラッシュが発生したので、デバイスを接続してオーガナイザーを開き、デバイスログに移動してクラッシュレポートを見つけます。これが次のように表示されます。

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x3514488f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x3656b259 objc_exception_throw + 33
2   CoreFoundation                  0x35144789 +[NSException raise:format:] + 1
3   CoreFoundation                  0x351447ab +[NSException raise:format:] + 35
4   CoreFoundation                  0x350b168b -[__NSCFDictionary setObject:forKey:] + 235
5   myapp                           0x0015b4a7 0xe8000 + 472231
6   myapp                           0x0018add1 0xe8000 + 667089
7   myapp                           0x0013cd5b 0xe8000 + 347483
8   Foundation                      0x30ffb60d __NSFireTimer + 145
9   CoreFoundation                  0x35118a33 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15
10  CoreFoundation                  0x35118699 __CFRunLoopDoTimer + 365
11  CoreFoundation                  0x3511726f __CFRunLoopRun + 1207
12  CoreFoundation                  0x3509a4a5 CFRunLoopRunSpecific + 301
13  CoreFoundation                  0x3509a36d CFRunLoopRunInMode + 105
14  GraphicsServices                0x36396439 GSEventRunModal + 137
15  UIKit                           0x32190e7d UIApplicationMain + 1081
16  myapp                           0x000f6aff 0xe8000 + 60159
17  myapp                           0x000e9370 0xe8000 + 4976


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x34f3832c __pthread_kill + 8
1   libsystem_c.dylib               0x36e34208 pthread_kill + 48
2   libsystem_c.dylib               0x36e2d298 abort + 88
3   libc++abi.dylib                 0x30af9f64 abort_message + 40
4   libc++abi.dylib                 0x30af7346 _ZL17default_terminatev + 18
5   libobjc.A.dylib                 0x3656b350 _objc_terminate + 140
6   libc++abi.dylib                 0x30af73be _ZL19safe_handler_callerPFvvE + 70
7   libc++abi.dylib                 0x30af744a std::terminate() + 14
8   libc++abi.dylib                 0x30af881e __cxa_rethrow + 82
9   libobjc.A.dylib                 0x3656b2a2 objc_exception_rethrow + 6
10  CoreFoundation                  0x3509a506 CFRunLoopRunSpecific + 398
11  CoreFoundation                  0x3509a366 CFRunLoopRunInMode + 98
12  GraphicsServices                0x36396432 GSEventRunModal + 130
13  UIKit                           0x32190e76 UIApplicationMain + 1074
14  myapp                           0x000f6af8 0xe8000 + 60152
15  myapp                           0x000e9368 0xe8000 + 4968

Xcodeがクラッシュレポートを自動的に表すハンドルを処理すると思いましたか?行番号やメソッドが表示されないのはなぜですか?そして、なぜ私の例外コードは0x00000000なのですか?

ここにある方法を試しましたが、いずれかのメモリアドレスを入力すると、出力は同じメモリアドレスになります。これは私がクラッシュログから取得できる最も多くの情報ですか、それともここで何か問題がありますか?

4

5 に答える 5

8

これが同じ問題を抱えている他の誰かを助けるかもしれないことを期待して、私のために働いたのはアーカイブディレクトリで次のコマンドを実行することでした(/ Users / my_user / Library / Developer / Xcode / Archives / 2012-09-24のように見えるので、最初にそこにcd)

mdimport .

その後、symbolicatecrashスクリプトを実行してみてください。XCodeで、オーガナイザー、デバイスログに移動し、クラッシュログを右クリックして[Re-SymbolicateLog]を選択します。

于 2012-09-24T22:46:27.143 に答える
8

クラッシュ レポートを象徴するには、その正確なビルドの dSYM パッケージが必要です。これはアーカイブされていないデバッグ ビルドだったので、次回アプリをビルドしたときに dSYM も上書きされたと思います。これが、主催者がクラッシュ レポートを完全に象徴することができなかった理由です。

あなたが言及した方法は、バイナリにシンボルが削除されていない場合にのみ機能し、その場合でも行番号は報告されません! したがって、アプリ バイナリに対して使用する代わりに、dSYM と共に使用します。運が良ければ、新しい dSYM にはまだ役立つ情報が含まれています。

atos -arch armv7 -o 'appname.app.dSYM' 0x0015b4a7

クラッシュ自体は、NSDictionary 値を nil キーなどに設定している可能性があります。

于 2012-05-22T18:43:03.623 に答える
4

XCode 4.5.1 でクラッシュ レポートを [Organizer] -> [Devices] -> [Library] -> [Device Logs] にドラッグしてもシンボル化できませんでした。

dSYM上記の@Kerniによる投稿ごとに指定しても、クラッシュのシンボリックアドレスを取得できませんでした。

を使用atosしましたが、ファイル内のシンボル ファイルのフル パスを指定することによってのみ機能させることができましたxcarchive(実際にはディレクトリです)。例:

cd dir_where_the_xcarchive_is
atos -arch armv7 -o myApp\ 9-18-12\ 5.28\ PM.xcarchive/dSYMs/myApp.app.dSYM/Contents/Resources/DWARF/myApp   0x0001943a
于 2012-10-22T21:37:02.137 に答える
1

例外コードに関するご質問について...

Exception Codes: 0x00000000, 0x00000000

...この Apple Technical Noteがあなたの質問に答えるかもしれません。つまり、このクラッシュ レポートは、文書化されている標準のクラッシュ タイプによって生成されたものではありません。

クラッシュ ログの約 16 行に、テキストで始まる行があり、その後に 1 つ以上の 16 進数値が続きます。これらの値は、クラッシュの性質に関する詳細情報を提供するプロセッサ固有のコードです。これらのコードから、アプリケーションがプログラミング エラー (不正なメモリ アクセス、例外など) が原因でクラッシュしたかどうか、またはアプリケーションが他の理由で終了したかどうかがわかります。たとえば、次のような場合です。

例外コード0x8badf00dは、ウォッチドッグ タイムアウトが発生したためにアプリケーションが iOS によって終了されたことを示します。アプリケーションの起動、終了、またはシステム イベントへの応答に時間がかかりすぎました。これの一般的な原因の 1 つは、メイン スレッドで同期ネットワークを実行していることです。例外コード0xbad22222は、VoIP アプリケーションが頻繁に再開されたため、iOS によって終了されたことを示します。例外コード0xdead10ccは、アプリケーションがバックグラウンドで実行されている間にシステム リソース (アドレス帳データベースなど) を保持していたため、アプリケーションが iOS によって終了されたことを示します。例外コード0xdeadfa11アプリケーションがユーザーによって強制終了されたことを示します。ユーザーが最初に「スライドして電源オフ」が表示されるまでオン/オフボタンを押したままにし、次にホームボタンを押したままにすると、強制終了が発生します。アプリケーションが応答しなくなったためにユーザーがこれを行ったと考えるのが妥当ですが、強制終了はどのアプリケーションでも機能するという保証はありません。

于 2012-12-19T05:21:33.970 に答える
0

代わりにCrashlyticsを使用してください。

リアルタイムのクラッシュ レポートと、クラッシュが発生した正確な行番号についてのインスタント (電子メールで通知を受け取る) を提供します。

于 2012-12-19T05:26:09.017 に答える