2014-10-06 15 views
6

Vedo che il thread principale si blocca per alcuni secondi nella mia app solo su iOS 8 (non su versioni iOS precedenti).
Sto utilizzando @synchronised (self) in un numero di posti e anche utilizzando Setup RemoteIO. La mia domanda è: come faccio a eseguire il debug in che punto è esattamente il thread principale che blocca e ad ottenere informazioni aggiuntive, come quello che sta facendo in quel momento?
Il thread principale di iOS si blocca per alcuni secondi

Sto usando Xcode 6 quindi per favore dimmi il modo migliore per eseguire il debug.

MODIFICA: questo è l'output di Pause.

enter image description here

enter image description here

+0

Cerca negli strumenti. – dandan78

+1

Strumenti -> Time Profiler – kabarga

risposta

9

Come primo passo per capire cosa sta succedendo vorrei suggerire a premere semplicemente Pausa nel debugger mentre si sta avendo un congelamento. Ti mostrerà quale thread sta facendo cosa a quel punto.

Si vedrà un'attività ancora in esecuzione o riga msg_trap che indica che c'è un blocco da qualche parte.

Posta qui ciò che hai scoperto.

+1

Ok questo mi ha fatto impazzire dal mattino. Mi fermo ogni volta che trovo il thread principale sospeso all'avvio. Mostra 13 blocchi in sospeso da eseguire. Mostra __semwait_signal in alto, quindi il thread principale attende che alcune attività finiscano? Ho modificato la domanda e gli screenshot allegati alla domanda. –

+0

Se ho capito bene cosa stai facendo, hai qualche elaborazione sul video catturato da una telecamera. Quindi, richiede troppo tempo per elaborare ogni frame, oppure il callback viene chiamato troppo spesso, quindi non può fare nulla tra una chiamata e l'altra. Presumo che sia il tuo codice quindi ora Time Profiler potrebbe essere utile. – hybridcattt

+0

In realtà non c'è niente di costoso che sto facendo e succede solo in iOS 8. Sono sicuro di aver scoperto un bug in iOS 8 che a volte (non sempre) risulta nel thread principale andando a dormire per alcuni secondi all'avvio. L'ora del sonno varia tra 1 sec e 15 sec. Ho usato il profiler del tempo e mostra il thread principale che chiama addormentato. Perché il thread principale chiama addormentato è ciò che non capisco. –

Problemi correlati