Die iOS-App stürzt bei jedem zweiten Start ab und kann keinen Fehler finden

81

Beim ersten Start der App scheint alles gut zu laufen. Ich drücke die Stopp-Taste, mache etwas Arbeit und wenn ich es erneut starte, scheint es abzustürzen, bevor es überhaupt etwas laden kann. Drücken Sie Stopp, drücken Sie erneut Ausführen, und es funktioniert einwandfrei. Bis ich den Vorgang wiederhole.

Hier hebt xcode den Fehler mit "Thread 1: Signal SIGABRT" hervor. Offensichtlich nichts Nützliches hier.

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([PokerAppDelegate class]));
    }
}

Die Debug - Konsole zeigt nichts außer (LLDB) (also ich seine Einstellung nehme an , an diesem Punkt nicht abstürzt) Also, wenn ich eine ausführen BTdas ist , was ich bekommen:

(lldb) bt
* thread #1: tid = 0x1c03, 0x9a258a6a libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGABRT
    frame #0: 0x9a258a6a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x99ea1b2f libsystem_c.dylib`pthread_kill + 101
    frame #2: 0x04a7057b libsystem_sim_c.dylib`abort + 140
    frame #3: 0x01dc0b4e GraphicsServices`GSRegisterPurpleNamedPort + 348
    frame #4: 0x01dc069f GraphicsServices`_GSEventInitialize + 123
    frame #5: 0x01dc0c1f GraphicsServices`GSEventInitialize + 36
    frame #6: 0x000163f9 UIKit`UIApplicationMain + 600
    frame #7: 0x00001d0d Guitar Chord Poker HD`main(argc=1, argv=0xbffff32c) + 141 at main.m:16
    frame #8: 0x00001c35 Guitar Chord Poker HD`start + 53
(lldb) 

Folgendes habe ich bisher getan:

  • 'Clean' durchgeführt
  • Ich habe die Simulatoren zurückgesetzt und meinen Computer zurückgesetzt
  • Ich habe den gesamten Code im View Controller auskommentiert, stürzt immer noch ab
  • Ich habe den gesamten Code im App-Delegaten auskommentiert, stürzt immer noch ab
  • ABER ... Ich habe die App auf einem Gerät außerhalb von Xcode ausgeführt und sie scheint einwandfrei zu funktionieren.
  • (BEARBEITEN) Ich habe xcode und alle Inhalte (Simulatoren, Dokumente) aus den verschiedenen Cache-Ordnern gelöscht / neu installiert (dies verhindert, dass xcode die alten nach einem neuen Download automatisch neu installiert). Kann immer noch nicht finden, wo Befehlszeilentools aufbewahrt werden. Stürzt immer noch ab.

Trotz alledem stürzen Apps immer noch bei jedem zweiten / zweiten Start ab.

Ich hatte bis zum letzten Xcode-Update keine Probleme. Könnte es ein Xcode-Fehler sein?

(BEARBEITEN) Ich verwende auch die neuesten Entwicklerversionen von OSX. Könnte das stören?

Beau Nouvelle
quelle
Haben Sie versucht, ein leeres Projekt auf dem iOS-Simulator und auf einem verbundenen / getrennten Gerät auszuführen?
Reck Hou
@ReckHou Okay, wow, ja, das gleiche Problem bei einem brandneuen Projekt. Was könnte die Ursache sein? Gibt es einen Weg, außer xcode neu zu installieren?
Beau Nouvelle
Wir haben bereits zwei Leute mit diesem Problem. (Nach dem letzten Update erhalte ich einen ähnlichen Fehler.) Derzeit verwende ich AppCode bis zum nächsten Xcode-Update mit behobenem Fehler. (Meine Frage stackoverflow.com/questions/16113036/… )
Ilya Ilin
5
Nachdem ich heute auf OSX 10.8.4 aktualisiert hatte, sah ich dasselbe. Ich hatte keine Probleme mit Xcode 4.6.2 unter OSX 10.4.3. Die Probleme scheinen zu verschwinden, wenn ich von LLDB zu GDB wechsle, sodass dies möglicherweise durch den Debugger (Xcode 4.6.2 LLDB in Kombination mit OSX 10.8.4) verursacht wird.
Matej Bukovinski
1
Ich bekomme das gleiche nach einem Update auf 10.8.4. Jeder zweite Start. Simulator zurücksetzen, Xcode neu starten, macht keinen Unterschied. Sofortiger Absturz in main (). Jeder zweite Lauf. Danke für die GDB-Idee - das funktioniert hier.
Graham Perks

Antworten:

75

Scheint eine Kombination aus OS X 10.8.4 und LLDB zu sein . Wie Kenster sagt, lässt der Wechsel zu GDB das Problem verschwinden.

Bearbeiten:
Es wird durch eine Race-Bedingung im Debug-Server verursacht (ich höre).

Hier ist ein Fix, wenn Sie LLDB weiterhin verwenden möchten: Anstatt auf Ausführen zu klicken, während die App bereits im Simulator ausgeführt wird, beenden Sie sie in Xcode (⌘-.), Sagen Sie 5 Mal "Ich liebe Xcode" und führen Sie sie erneut aus (⌘-) R). Es wird nicht abstürzen, ich habe es getestet.


Feste in Xcode 4.6.3.

Nevan König
quelle
Es funktioniert nicht wirklich gut. Der Start verschluckt sich jedes Mal. Der Wechsel zu GDB ist derzeit eine viel stabilere Lösung, bis Apple das Problem behebt.
Jonny
2
Sie und der Fragesteller sind meine neuen persönlichen Lieblingsleute. Das machte mich wahnsinnig, wohin ich meinen MBP zur Reparatur schicken wollte.
Kalle
Mit 10.9 und Xcode 5 wurde GDB entfernt und jetzt ist alles LLDB. Aber es funktioniert alles so wie es sollte!
Beau Nouvelle
Argh! Zurück zu einem veralteten Compiler zu gehen, nur um einen (wirklich schmerzhaften) Fehler im brandneuen Compiler auf dem neuesten Stand der Technik zu beheben, ist ein großes Problem… Aber keine Wahl, ich muss es tun.
MonsieurDart
Das Update auf 4.6.3 hat es geschafft - ich wusste nicht einmal, dass diese Version veröffentlicht wurde.
David H
11

Ich hatte auch dieses Problem. Schauen Sie sich diesen Beitrag an. Die Xcode 4.6.2-App stürzt bei jedem zweiten Lauf ab

Ändern Sie grundsätzlich Ihren Debugger von LLDB zu GDB. Ich kann nicht glauben, dass dies daran lag, dass LLDB fehlerhaft war.

Kenster
quelle
Oh mein Gott ... behoben. Ich bin so daran gewöhnt, dass ich mich jedes Mal, wenn ich ein Projekt leite, darauf vorbereite, wütend zu werden. Aber nichts passiert. Tausend Dank. Wird Apple in meinem Fehlerbericht informieren.
Beau Nouvelle
2
Danke für die Information, hat mich gestern den ganzen Tag verrückt gemacht. Warum warte ich immer, bis ich alle (verbleibenden) Haare herausgezogen habe, bevor ich HIER suche? LOL.
Bertie
3

Das Wechseln zu GDB oder das Neustarten von Gerät / Host löst das Problem in meiner Umgebung nicht.

Das Ausführen des Ziels "Ausführen" im zugehörigen XCode-Schema wurde jedoch so geändert, dass es nicht mehr automatisch gestartet wird, sondern "Warten auf den Start von HelloWorld .app" .

Der einzige Nachteil ist, dass dies bedeutet, dass die Anwendung manuell auf dem Gerät gestartet werden muss. Der Debugger wird dann verbunden.

Mekugi
quelle