web-dev-qa-db-ja.com

クラッシュレポートを理解して解決する方法:SIGSEGV、SEGV_ACCERR

私は時々このクラッシュレポートを受け取ります:

Name: SIGSEGV
Reason: SEGV_ACCERR
Stack Trace:

0 MyApp 0x00070456 0x1000 + 455766
1 MyApp 0x0007a34d 0x1000 + 496461
2 MyApp 0x0007a4f1 0x1000 + 496881
3 MyApp 0x000d31dd 0x1000 + 860637
4 MyApp 0x00067f0f 0x1000 + 421647
5 MyApp 0x0005ad69 0x1000 + 367977
6 MyApp 0x000081e3 0x1000 + 29155
7 MyApp 0x00008ae9 0x1000 + 31465
8 CoreFoundation 0x35a547e4 __invoking___ + 68
9 CoreFoundation 0x359af7b1 -[NSInvocation invoke] + 160
10 Foundation 0x3556268f -[NSInvocationOperation main] + 114
11 Foundation 0x354fb393 -[__NSOperationInternal start] + 862
12 Foundation 0x35564793 __block_global_6 + 102
13 libdispatch.dylib 0x348dec59 _dispatch_call_block_and_release + 12
14 libdispatch.dylib 0x348e1817 _dispatch_worker_thread2 + 258
15 libsystem_c.dylib 0x32e0edfb _pthread_wqthread + 294

このクラッシュレポートがわかりません。また、これがいつ起こっているのかもわかりません。

このクラッシュについてもっと知る方法はありますか?

この問題を解決するにはどうすればよいですか?

13
brush51

クラッシュレポートをシンボリック化する必要があります。これにより、0行目から7行目のアドレスが意味のあるクラス、メソッド、および行番号に変換されます。通常、クラッシュの原因となったビルドのバイナリがまだある場合、Xcodeは自動的にそれを行います。

6
Kerni

質問は古いですが、ジョン・スミスが答えるよりも良い方法があります。

現在、最良のアプローチは、それぞれのテンプレートを使用してプロファイラー(XCode:製品/プロファイル)を使用して実行されます。
おそらく、エミュレータだけでなくデバイスでもサポートされるようになった「ゾンビ」テンプレートを使用する必要があります:)。このツールを使用すると、メモリの誤った使用を発見する可能性が高くなります。

1
Marek R

SIGSEVエラーは、タッチが許可されていないメモリを取得しようとしたときに送信される信号です。

この問題を解決する最良の方法は、問題である行を見つけるために、行ごとにブレークポイントとジャンプ行を配置することです。

または、デバッグログをいくつか置いて、問題があったかどうかを確認することもできます

SIGSEVまたはSEGV_ACCERRの意味を理解するには、インターネットで詳細情報を検索できます;)

1
John Smith