4

OS X アプリケーションでクラッシュ修正を行っています。クラッシュレポートが表示されます

Date/Time: 2012-05-01 16:05:58.004 +0200
OS Version: Mac OS X 10.5.8 (9L31a)

Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000545f5f00
Crashed Thread: 8

Thread 8 crashed with X86 Thread State (32-bit):

eax: 0x140e0850 ebx: 0x00060fc8 ecx: 0x92df0ec0 edx: 0xc0000003
edi: 0x545f5f00 esi: 0x140e0870 ebp: 0xb0445988 esp: 0xb0445964
ss: 0x0000001f efl: 0x00010206 eip: 0x92dca68c cs: 0x00000017
ds: 0x0000001f es: 0x0000001f fs: 0x0000001f gs: 0x00000037
cr2: 0x545f5f00

このレポートを使用してアプリケーション コードを分析するにはどうすればよいですか?

X86 スレッド状態 (32 ビット) でクラッシュしたスレッド 0 とは何ですか?

4

2 に答える 2

4

CrashReporter に関する Apple のテクニカル ノートをご覧ください: https://developer.apple.com/library/mac/#technotes/tn2004/tn2123.html

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0x00000000  ebx: 0x942cea07  ecx: 0xbfffed1c  edx: 0x94b3a8e6
  edi: 0x00000000  esi: 0x00000000  ebp: 0xbfffed58  esp: 0xbfffed1c
   ss: 0x0000001f  efl: 0x00010206  eip: 0x00000000   cs: 0x00000017
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
  cr2: 0x00000000

32 ビット コードを実行する Intel ベースのコンピューターの場合、次の点を考慮する必要があります。

eip と例外アドレス (前述) の 2 つの値に注目してください。

eip は、例外が発生した時点のプログラム カウンターです。つまり、例外を引き起こした命令のアドレスです。ほとんどのメモリ以外のアクセス例外 (たとえば、0 による整数除算によって発生する EXC_ARITHMETIC/EXC_I386_DIV) では、これがキー値です。

メモリ アクセス例外の場合:

eip が例外アドレスと等しい場合、例外はフェッチ命令によって発生しました。通常、これは次のことを意味します。

偽の関数ポインタを呼び出しました (または、同等に、偽のオブジェクトのメソッドを呼び出しました)

不正なアドレスに戻りました。これは、スタックが破損したことを意味します

eip が例外アドレスと等しくない場合、例外はメモリ アクセス命令によって発生しました (C に関しては、これは無効なポインターを逆参照していることを意味します)。

于 2012-06-19T09:13:17.987 に答える
0

クラッシュの理由 (スレッド 8 の EXC_BAD_ACCESS)、レジスタの内容、すべてのスレッドのバックトレースなど、クラッシュに関する情報を取得します。

スレッド 8 がクラッシュしました。ここに貼り付けなかったクラッシュ レポートの部分には、スレッド 8 を含むすべてのスレッドのスタック トレースがあります。

于 2012-06-19T09:06:52.343 に答える