我正在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位)崩溃?
如果有人知道请帮助我。 提前致谢。
答案 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.看看它在做什么,你可能对发生的事情有了更好的了解。