如何阅读崩溃日志?如何找到为什么应用程序在系统库崩溃?拿什么EXC_CRASH(SIGABRT)?

StackOverflow https://stackoverflow.com/questions/2322198

我得到了一个崩溃日志从客户到人物为什么她的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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top