Wie Crash-Protokoll lesen? Wie zu finden, warum die App in der Systembibliothek abstürzt? Was bedeutet EXC_CRASH (SIGABRT)?

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

Frage

Ich habe ein Crash-Logs von einem Kunden zu Figur, warum mein app Absturz auf ihrem iPhone.

Hier ein paar Informationen von Crash-Protokoll:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Stack-Trace für Gewinde 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)
...

Hier ist Code aus AccountManager.m:

 NSNumber *number = ...;
 if (number) {
  return [number unsignedIntegerValue]; // line 151
 } else {
  return 0;
 }

Die wichtigste Frage ist, wie solches Crash-Protokoll zu lesen? Die App stürzt irgendwo in der Systembibliothek, nicht mehr zusätzliche Informationen. Gibt es irgendeine Art und Weise, wie Grund von Crash finden?

Update: Ich habe eine Menge von Foren Beiträgen gegoogelt, wo Ausnahmetyp EXC_CRASH (SIGABRT) und ersten Zeilen sind von einem Thread-Stack abgestürzt ist:

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

Was bedeutet diesen Ausnahmetyp (EXC_CRASH (SIGABRT)) bedeuten?

War es hilfreich?

Lösung

Als erstes müssen Sie das Crash-Protokoll mit dem DSYM symbolicate zu verstehen, was passiert. Sie verlassen nun die DSYM Datei aus der Zeit haben müssen, dass die Anwendung gebaut wurde. Die DSYM Datei ermöglicht es Ihnen Karte von jenen Speicheradressen zurück zu lesbaren Code-Zeilen rückgängig zu machen.

SIGABRT ist das Signal, dass Sie erhalten, wenn Sie eine nicht behandelte Ausnahme haben, wie [someArray objectAtIndex:2] Aufruf, wenn das Array nur 1 Punkt hat. Oder, häufiger, ein Unbekannter Selektor. [NSArray unsignedIntValue]

Werfen Sie einen Blick auf diese Crash-Protokoll in diese Frage . Beachten Sie, dass die Call-Stack-Bibliotheken in Foundation das gleiche wie Ihr Code sind -. Und es ist ein Unbekannter Selektor

Der Code lautet:

NSNumber *num = foo;
if (num)
{
  bar = [num unsignedIntValue];
}

Was haben Sie uns nicht gesagt - aber es ist sehr wichtig - ist das, was in „foo“ ist. Wie ordnen Sie, dass NSNumber? Wenn es ein anderes Objekt als ein NSNumber ist, dann ist dein Crash-Protokoll wie das Ihre aussehen wird.

Wenn Sie bei der Programmierung, um wirklich defensiv wollen, kann man sagen:

if (num && [num isKindOfClass:[NSNumber class]])

Aber wirklich, was auch immer Ihr "foo" ist, sollte immer eine NSNumber zurückkehren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top