2012-05-03 16 views
7

Estoy usando Xcode 4.3.2 con lldb como mi depurador.¿Cómo configuro un punto de corte simbólico en _WebThreadLockFromAnyThread en Xcode?

He heredado un proyecto que contiene código que está llamando UIKit de subprocesos secundarios, como se muestra por estos mensajes de registro:

2012-05-02 21: 48: 14.603 Appname Dev [77594: 16e0f] void _WebThreadLockFromAnyThread (bool), 0x8d5f810: Obtención del bloqueo web de un hilo que no sea el hilo principal o el hilo web. No se debe llamar a UIKit desde un subproceso secundario.

He limpiado la mayor parte del código que hacía llamadas a UIKit desde subprocesos secundarios, pero de vez en cuando veo este mensaje en los registros. La aplicación no está fallando, por lo que es difícil determinar dónde radica el problema.

me gustaría establecer un punto de interrupción en _WebThreadLockFromAnyThread, pero cuando intento para establecer un punto de ruptura simbólica usando:

b _WebThreadLockFromAnyThread 

el depurador me dice:

punto de interrupción conjunto --name ' _WebThreadLockFromAnyThread 'Punto de interrupción created: 12: name =' _WebThreadLockFromAnyThread ', locations = 0 (pendiente) ADVERTENCIA: No se puede resolver el punto de interrupción en ninguna ubicación real de .

También intenté crear el punto de corte simbólico usando la interfaz de usuario en el navegador de punto de interrupción, pero no estoy seguro de qué ingresar para el módulo. Cuando dejo el módulo en blanco, se crea el punto de interrupción pero aún no se rompe cuando aparece el mensaje de registro en la consola de depuración.

¿Alguien puede decirme cómo puedo agregar un punto de interrupción en _WebThreadLockFromAnyThread, y también cómo determinaría qué es el módulo de definición para este símbolo?

Respuesta

2

Simplemente omita el guión bajo. b WebThreadLockFromAnyThread funciona para mí en lldb y gdb. Ahora, este es Xcode 4.6, así que si estás atascado en la versión anterior, supongo que es posible que haya un problema en esa versión que no está presente en 4.6.

+0

¡Impresionante, muchas gracias! Terminé usando el siguiente comando similar que también establece una condición tal que solo se rompe si la función se llama fuera del hilo principal: 'break set -n WebThreadLockFromAnyThread -c '! (BOOL) [NSThread isMainThread]' ' – Greg

0

Puede intentar usar el comando nm o la herramienta de volcado de clases para ubicar el módulo.

+0

Intenté usar nm en el ejecutable que Xcode produjo cuando construí mi aplicación, pero el símbolo no está ubicado en ella. – Greg

0

Lo más probable es que no haya símbolos que necesite porque xcode de forma predeterminada produce una compilación de "liberación" que si soy correcto elimina los símbolos haciendo que el archivo exec sea mucho más pequeño. No estoy seguro de cómo hacerlo en este momento, pero debe encontrar la opción de cambiar a "depurar" compilación lo que garantizará tener todos esos encantadores símbolos esperando su análisis.

+0

Estoy trabajando con una compilación que tiene "Símbolos de depuración de tira durante la copia" en "No". – Greg

Cuestiones relacionadas