如何阅读崩溃日志?如何找到为什么应用程序在系统库崩溃?拿什么EXC_CRASH(SIGABRT)?
题
我得到了一个崩溃日志从客户到人物为什么她的iPhone我的应用程序崩溃。
下面从崩溃日志一些信息:
Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0
堆栈跟踪线程0
Thread 0 Crashed: 0 libSystem.B.dylib 0x3293f98c 0x328c1000 + 518540 1 libSystem.B.dylib 0x3293f97c 0x328c1000 + 518524 2 libSystem.B.dylib 0x3293f96e 0x328c1000 + 518510 3 libSystem.B.dylib 0x3295461a 0x328c1000 + 603674 4 libstdc++.6.dylib 0x30a143b0 0x309cf000 + 283568 5 libobjc.A.dylib 0x3347a858 0x33475000 + 22616 6 libstdc++.6.dylib 0x30a12776 0x309cf000 + 276342 7 libstdc++.6.dylib 0x30a127ca 0x309cf000 + 276426 8 libstdc++.6.dylib 0x30a12896 0x309cf000 + 276630 9 libobjc.A.dylib 0x33479714 0x33475000 + 18196 10 CoreFoundation 0x335c8210 0x33534000 + 606736 11 CoreFoundation 0x3354ea8e 0x33534000 + 109198 12 CoreFoundation 0x33545ab8 0x33534000 + 72376 13 Journaler Lite 0x0001699e -[AccountManager unsignedIntegerValueForPath:] (AccountManager.m:151) ...
下面是从AccountManager.m
代码:
NSNumber *number = ...; if (number) { return [number unsignedIntegerValue]; // line 151 } else { return 0; }
的主要问题是如何解读这样的崩溃日志?应用程序崩溃的系统库中的某个地方,没有更多的附加信息。是否有某种方式如何找到坠毁的原因是什么?
<强>更新强>
我已经一派很多论坛的帖子,其中异常类型是EXC_CRASH (SIGABRT)
和第一线从坠毁线程堆栈的是:
Thread 0 Crashed: 0 libSystem.B.dylib 0x3293f98c 0x328c1000 + 518540 1 libSystem.B.dylib 0x3293f97c 0x328c1000 + 518524 2 libSystem.B.dylib 0x3293f96e 0x328c1000 + 518510 3 libSystem.B.dylib 0x3295461a 0x328c1000 + 603674 4 libstdc++.6.dylib 0x30a143b0 0x309cf000 + 283568 5 libobjc.A.dylib 0x3347a858 0x33475000 + 22616 6 libstdc++.6.dylib 0x30a12776 0x309cf000 + 276342 7 libstdc++.6.dylib 0x30a127ca 0x309cf000 + 276426 8 libstdc++.6.dylib 0x30a12896 0x309cf000 + 276630 9 libobjc.A.dylib 0x33479714 0x33475000 + 18196 10 CoreFoundation 0x335c8210 0x33534000 + 606736 11 CoreFoundation 0x3354ea8e 0x33534000 + 109198
这是什么类型的异常(EXC_CRASH (SIGABRT)
)平均?
解决方案
首先,你需要使用DSYM明白发生了什么symbolicate崩溃日志。你需要有从应用程序始建时的DSYM文件。所述DSYM文件允许用户从那些存储器地址回的代码读行反向映射。
SIGABRT是,你得到当你有未处理的异常,如调用[someArray objectAtIndex:2]
如果阵列只有1项所述信号。或者,更经常地,一个无法识别的选择:[NSArray unsignedIntValue]
参加这个问题一起来看看这款崩溃日志。请注意,在基金会的调用栈库与您的代码 - 而这是一个无法识别的选择
您的代码是:
NSNumber *num = foo;
if (num)
{
bar = [num unsignedIntValue];
}
你还没有告诉我们什么 - 但是是非常重要的 - 是什么,是在“富”。如何您分配的NSNumber?如果它是任何其他对象不是一个NSNumber,那么你的崩溃日志看起来像你的。
如果你想在你的编程真正的防守,你可以说:
if (num && [num isKindOfClass:[NSNumber class]])
不过说真的,无论你的“富”是应当始终返回一个NSNumber。
不隶属于 StackOverflow