线程0与X86线程状态(32位)崩溃:在cocoa应用程序中

时间:2012-06-19 07:29:36

标签: objective-c macos cocoa osx-leopard

我正在osx应用程序中进行崩溃修复。崩溃报告显示

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

如何使用此报告对应用程序代码进行去皮?

什么是线程0与X86线程状态(32位)崩溃?

如果有人知道请帮助我。 提前致谢。

2 个答案:

答案 0 :(得分:4)

在此处查看Apple关于CrashReporter的技术说明: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和异常地址(如前所述)。

eip是异常发生时的程序计数器。也就是说,它是导致异常的指令的地址。对于大多数非内存访问异常(例如,由整数除以零引起的EXC_ARITHMETIC / EXC_I386_DIV),这是键值。

对于内存访问异常:

如果eip等于异常地址,则异常是由获取指令引起的。通常这意味着:

你已经调用了一个假的函数指针(或者,等效地称为虚假对象上的方法)

你已经回到了一个糟糕的地址,这反过来意味着你已经破坏了堆栈

如果eip不等于异常地址,则异常是由内存访问指令引起的(就C而言,这意味着您将取消引用无效指针)。

答案 1 :(得分:0)

您将获得有关崩溃的信息,包括崩溃的原因(线程8中的EXC_BAD_ACCESS),寄存器内容以及每个线程的回溯。

线程8崩溃了。在崩溃报告的部分你没有粘贴到这里,每个线程都有堆栈跟踪,包括线程8.看看它在做什么,你可能对发生的事情有了更好的了解。