2012-05-03 11 views
7

Sto usando Xcode 4.3.2 con lldb come mio debugger.Come si imposta un punto di interruzione simbolico su _WebThreadLockFromAnyThread in Xcode?

Ho ereditato un progetto che contiene il codice che sta chiamando UIKit dal thread secondari, come mostrato da questi messaggi di log:

2012-05-02 21: 48: 14,603 Appname Dev [77594: 16e0f] void _WebThreadLockFromAnyThread (bool), 0x8d5f810: Ottenimento del blocco Web da un thread diverso dal thread principale o dal thread Web. UIKit non deve essere chiamato da un thread secondario.

Ho ripulito la maggior parte del codice che stava effettuando chiamate UIKit da thread secondari, ma di tanto in tanto vedo ancora questo messaggio nei log. L'app non si arresta in modo anomalo, quindi è difficile individuare dove si trova il problema.

mi piacerebbe impostare un punto di interruzione _WebThreadLockFromAnyThread, ma quando provo a impostare un punto di interruzione simbolica utilizzando:

b _WebThreadLockFromAnyThread 

il debugger mi dice:

breakpoint impostato --name ' _WebThreadLockFromAnyThread 'Punto di interruzione creato: 12: name =' _WebThreadLockFromAnyThread ', posizioni = 0 (in sospeso) AVVISO: impossibile risolvere il punto di interruzione in posizioni reali .

Ho anche provato a creare il punto di interruzione simbolico utilizzando l'interfaccia utente nel navigatore di breakpoint, ma non sono sicuro di cosa inserire per il modulo. Quando lascio il modulo vuoto, viene creato il punto di interruzione ma non si interrompe ancora quando viene visualizzato il messaggio di registro nella console di debug.

Qualcuno può dirmi come posso aggiungere un punto di interruzione su _WebThreadLockFromAnyThread e anche come determinare quale sia il modulo di definizione per questo simbolo?

risposta

2

Basta lasciare fuori il segno di sottolineatura. b WebThreadLockFromAnyThread funziona per me sia in lldb che in gdb. Ora, questo è Xcode 4.6, quindi se sei bloccato sulla versione precedente suppongo sia possibile che ci sia un problema in quella versione non presente in 4.6.

+0

Fantastico, grazie mille! Ho finito per usare il seguente comando simile che imposta anche una condizione tale che si interrompe solo se la funzione è chiamata al di fuori del thread principale: 'break set -n WebThreadLockFromAnyThread -c '! (BOOL) [NSThread isMainThread]'' – Greg

0

È possibile provare a utilizzare il comando nm o lo strumento dump di classe per individuare il modulo.

+0

Ho provato a utilizzare nm sull'eseguibile prodotto da Xcode quando ho creato la mia app, ma il simbolo non si trova in esso. – Greg

0

Molto probabilmente non ci sono simboli necessari perché xcode produce di default una build "di rilascio" che se sono corretti rimuove i simboli rendendo il file exec molto più piccolo. Non sono sicuro di come al momento, ma hai bisogno di trovare l'opzione per passare alla build di "debug" che garantirà di avere tutti quei simboli adorabili in attesa della tua analisi.

+0

Sto lavorando con una build con "Simboli debug strip durante la copia" impostato su "No". – Greg

Problemi correlati