2014-10-06 9 views
6

Ich sehe das Haupt-Thread-Einfrieren für ein paar Sekunden in meiner App nur auf iOS 8 (nicht auf früheren iOS-Versionen).
Ich verwende @synchronised (self) an einer Reihe von Orten und auch mit RemoteIO Setup. Meine Frage ist, wie kann ich debuggen, wo genau die Haupt-Thread-Blockierung ist und zusätzliche Informationen erhalten, wie zum Beispiel was es gerade macht?
iOS-Haupt-Thread friert für ein paar Sekunden ein

Ich verwende Xcode 6 also bitte sagen Sie mir die beste Möglichkeit zum Debuggen.

EDIT: Hier ist die Ausgabe von Pause.

enter image description here

enter image description here

+0

Untersuchen Sie Instrumente. – dandan78

+1

Instrumente -> Time Profiler – kabarga

Antwort

9

Als erster Schritt zu verstehen, was passiert Ich würde vorschlagen, einfach Pause in Debugger zu drücken, während Sie ein Einfrieren haben. Es zeigt dir, welcher Thread was zu diesem Zeitpunkt macht.

Sie sehen entweder eine Aufgabe, die noch ausgeführt wird, oder eine msg_trap-Zeile, die anzeigt, dass irgendwo eine Sperre vorhanden ist.

Posten Sie hier, was Sie herausgefunden haben.

+1

Ok das hat mich seit dem Morgen verrückt gemacht. Ich pausiere wann immer ich den Hauptfaden beim Start hängen sehe. Es zeigt 13 ausstehende Blöcke an, die ausgeführt werden sollen. Oben wird __semwait_signal angezeigt, also wartet der Haupt-Thread darauf, dass eine Aktivität beendet wird? Ich habe die Frage und angehängte Screenshots zur Frage bearbeitet. –

+0

Wenn ich richtig verstehe, was Sie tun, haben Sie etwas Verarbeitung auf Video von einer Kamera aufgenommen. Entweder dauert es zu lange, um jeden Frame zu verarbeiten, oder Callback wird zu oft aufgerufen, so dass zwischen den Aufrufen nichts unternommen werden kann. Ich nehme an, es ist Ihr Code, so dass Time Profiler jetzt hilfreich sein könnte. – hybridcattt

+0

Eigentlich gibt es nichts, was ich teuer mache und es passiert nur in iOS 8. Ich bin sicher, dass ich einen Fehler in iOS 8 entdeckt habe, der manchmal (nicht immer) dazu führt, dass der Haupt-Thread beim Start einige Sekunden lang in den Ruhezustand geht. Die Schlafzeit variiert zwischen 1 Sekunde und 15 Sekunden. Ich habe Zeit Profiler verwendet und es zeigt Haupt Thread usleep aufrufen. Warum der Hauptthread überhaupt Schlaf nennt, verstehe ich nicht. –

Verwandte Themen