SIGSEGV SEGV_ACCERR Crash-Berichte - Was tun?
Ich habe kürzlich eine app auf den AppStore mit Crittercism crash-reporting-und ich habe schon immer ziemlich viele crash-Berichte, die zu einem SIGSEGV-Fehler. Crittercism bietet mir einen StackTrace und ein paar praktische details zu Nutzungs-Statistiken, etc.. aber ich bin immer noch verwirrter durch diese symbolisiert die stack-traces. Ich habe ein paar Fragen im Allgemeinen über diese Art der Sache -
- Viele der Klassen und Methoden in der Stack-Trace sind auch nicht in meinem app (meines Wissens), das führt mich zu glauben, dass diese Abstürze werden durch private APIs von Apple. Werfen Sie einen Blick auf die Stack-Trace in der Nähe der Unterseite dieser Frage. Wie kann ich sagen, was zu Abstürzen meine app, wenn Sie alle Methoden und Klassen in der crash-Bericht nicht direkt umgesetzt in meinem code?
- Was machen die
+
Schilder mit zahlen am Ende jeder Zeile in dem abgestürzten thread stehen? - Meisten Q/A auf StackOverflow die Frage nach SIGSEGV abstürzt sagen, dass Sie verursacht werden durch Speicher-Lecks oder Probleme, jedoch wie kann ich einen Absturz, weil der ein problem mit dem Arbeitsspeicher wenn ich mit BOGEN in meine iOS-Projekt? Nicht ARC sollen alle jene Sachen verwalten für mich?
- Was soll ich tun, wenn ich kann nicht replizieren den Fehler /Absturz?
- Gibt es eine Möglichkeit, um wirklich Lesen ein StackTrace? Gibt es etwas, in der Regel, dass wäre hilfreich für das Verständnis, was ist passiert?
Hier ist der StackTrace aus dem Haupt-Thread Absturz-Bericht von Crittercism, dass sich diese Frage bezieht:
Thread: Unknown Name (Crashed)
0 UIKit 0x37307a22 -[UIView(CALayerDelegate) actionForLayer:forKey:] + 138
1 QuartzCore 0x38fdfff7 -[CALayer actionForKey:] + 75
2 QuartzCore 0x38fdffa7 _ZL12actionForKeyP7CALayerPN2CA11TransactionEP8NSString + 59
3 QuartzCore 0x38fdfe93 _ZN2CA5Layer12begin_changeEPNS_11TransactionEjRP11objc_object + 131
4 QuartzCore 0x38fdab87 _ZN2CA5Layer6setterEj12_CAValueTypePKv + 183
5 QuartzCore 0x39007057 -[CALayer setBackgroundColor:] + 35
6 UIKit 0x3731ef51 -[UIView(Internal) _setBackgroundCGColor:withSystemColorName:] + 1021
7 APP NAME 0x000a301d 0x00086000 + 118813
8 libdispatch.dylib 0x3962511f _dispatch_call_block_and_release + 11
9 libdispatch.dylib 0x39628ecf _dispatch_queue_drain$VARIANT$mp + 143
10 libdispatch.dylib 0x39628dc1 _dispatch_queue_invoke$VARIANT$mp + 41
11 libdispatch.dylib 0x3962991d _dispatch_root_queue_drain + 185
12 libdispatch.dylib 0x39629ac1 _dispatch_worker_thread2 + 85
13 libsystem_c.dylib 0x3824da11 _pthread_wqthread + 361
InformationsquelleAutor der Frage Samuel Spencer | 2012-12-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie symbolicate diese crash-Bericht. Nummer 7 ist die Linie, die Sie interessiert, aber es ist kein symbol Informationen, so dass die crash-Bericht, können nicht übersetzt werden in etwas nützliches für Sie. Um symbolicate Sie müssen den genauen code, der verwendet wurde, in Ihrem app-store release. Wenn Sie dass haben, dann können Sie auf diese Antwort:
https://stackoverflow.com/a/13280585/1155387
Als für die anderen Dinge:
1) nicht so schnell davon ausgehen, dass ein interner API Fehler. Ihre Funktion offensichtlich ändert die Hintergrundfarbe der Ansicht, die Anrufe, die verschiedenen Methoden intern. Es hat wahrscheinlich übergeben Sie einen ungültigen Wert irgendwie. Seien Sie nicht so naiv zu denken, die den code, den Sie schreiben, ist der nur code, der immer ausgeführt.
2) Die + - Zeichen geben den offset an, dass der code innerhalb des binären Objekts. Nicht nützlich für Sie.
3) können Sie ganz einfach einen memory-Fehler mit BOGEN, weil BOGEN befasst sich nur mit dem Umfang der Objective-C. Alle CoreFoundation Objekte, etc, werden nicht verwaltet werden. Das ist nicht unbedingt das, was hier passiert, aber ARC bedeutet nicht, Sie müssen aufhören zu denken, über die Speicher alle zusammen.
4) Siehe oben
5) Siehe oben
InformationsquelleAutor der Antwort borrrden
Ich bereit sein würde, Sie so etwas Tat:
Und dann Ihr Objekt "self" bekam freigegeben, die vor dem letzten ref zu den CALayer wurde fallengelassen. Ein delegate-Eigenschaft nicht halten Sie einen ref auf das Objekt, das Sie als layer.delegieren Wert. Das hat nichts zu tun mit ARC (ARC funktioniert nicht durch Magie fix alle Zeiger verwenden in Ihrer app).
So, erste, was zu tun ist, betrachten Sie den code, wo Sie einen CALayer delegieren und stellen Sie sicher, dass dieser Delegat ref wieder auf nil, wenn Ihr "selbst" - Objekt wird freigegeben. Das bricht dem Verein der CALayer und Ihr Objekt. Im Allgemeinen sollten Sie laden Sie Ihre dsym, Crittercism, aber es wird nicht viel in diesem Fall.
InformationsquelleAutor der Antwort MoDJ