Estoy depurando un bloqueo donde un hilo no principal utiliza los métodos de dibujo UIKit. Me gustaría establecer un punto de interrupción condicional en -[UIView layoutSubviews]
que solo se activa, si se ejecuta en un hilo no principal. es posible?¿Cómo establecer los puntos de corte específicos de subprocesos en Xcode?
Respuesta
Puede establecer puntos de interrupción por subproceso con la consola gdb. Por ejemplo:
b -[UIView layoutSubviews] thread 2
(Se utiliza el BGF "info threads" comandos para ver qué temas y qué existe GDB identificador utiliza para ellos).
No creo que haya una manera de establecer un punto de interrupción para cada subproceso excepto que el hilo principal (rosca 1), pero si usted tiene un número razonable de las discusiones que podrían establecer puntos de interrupción para cada uno de ellos individualmente si es necesario .
actualización:
Si la cosa por subproceso no está funcionando debido a GCD, otro enfoque que podría tomar sería simplemente establecer un punto de interrupción regular y fijar GDB para ese punto de ruptura descargue una traza inversa ("dónde") y luego "continuar".
Hay a very useful bit of code que cumple exactamente lo que está solicitando. También es mucho más rápido que usar puntos de interrupción. Lo hace mediante el método swizzling unos pocos métodos UIKit (setNeedsLayout, setNeedsDisplay, etc.) y lanzando una aserción si se llama a alguno en un hilo que no sea el hilo principal.
Funciona muy bien para detectar estos tipos de defectos durante el desarrollo, pero asegúrese de recordar eliminarlo del código de producción. También es trivial adaptarse a AppKit si es necesario.
- 1. Depuración en XCode - ejecutando código y puntos de corte
- 2. Los puntos de corte XCode 4 no se rompen en la línea correcta
- 3. Puntos de corte de GDB
- 4. cadena de corte Smarty para añadir puntos
- 5. Cómo deshabilitar todos los puntos de interrupción en Xcode
- 6. Xcode + eliminar todos los puntos de interrupción
- 7. Cómo eliminar puntos de interrupción en XCode
- 8. SIGTRAP a pesar de no establecer puntos de interrupción; punto de corte de hardware oculto?
- 9. ¿Cómo se configuran automáticamente los puntos de interrupción en todos los métodos en XCode?
- 10. ¿Cómo configuro un punto de corte simbólico en _WebThreadLockFromAnyThread en Xcode?
- 11. ¿Cómo funcionan los subprocesos en Python, y cuáles son los peligros específicos de Python-threading?
- 12. ¿Es posible utilizar los instrumentos de XCode con los puntos de interrupción habilitados?
- 13. estableciendo puntos de corte con nosetests --pdb option
- 14. ¿Cómo cambiar la cantidad de subprocesos de construcción en Xcode?
- 15. Los puntos de corte de depuración en la prueba JUnit en Eclipse no funcionan
- 16. MS Access 2003 no entra en modo de depuración e ignora los puntos de corte
- 17. Xcode está parando a continuación automática los puntos de interrupción
- 18. Establecer cookies de sesión para subdominios específicos
- 19. agujeros de corte en PathGeometry
- 20. Cómo usar las acciones de punto de corte de Xcode 4
- 21. Datos específicos de subprocesos: ¿por qué no puedo usar un mapa estático con identificadores de subprocesos?
- 22. ¿Cómo puedo establecer el número de subprocesos en Quartz.NET threadpool?
- 23. cómo establecer puntos de interrupción DOM en cromo
- 24. Coloreando puntos específicos con un color diferente en Mathematica
- 25. Establecer malloc_error_break en Xcode 4
- 26. Cómo establecer permisos de ruta específicos usando Git?
- 27. Banderas del compilador específicas para archivos específicos en Xcode
- 28. aspectoJ corte de punto a método de llamada en métodos específicos
- 29. Pycharm no reconoce puntos de corte en archivos que no son de prueba
- 30. Cómo establecer puntos de interrupción condicionales en Visual Studio?
Gracias por su respuesta! Dos preguntas: ¿Es normal que la velocidad de ejecución se reduzca considerablemente, hasta una posición inmóvil completa? Creé puntos de interrupción en '-layoutSubviews' como sugirió para todos mis hilos en ejecución, ninguno de ellos se activó todavía. En segundo lugar, ¿es correcto que no puedo establecer puntos de corte para hilos que aún no existen? Lo que lo haría bastante inútil en el caso de GCD donde los hilos se engendran y terminan regularmente. –
Buena pregunta. No lo sé, pero sospecho que el mecanismo de puntos de corte por subproceso funciona estableciendo un punto de interrupción regular y luego haciendo que gdb pruebe el ID del hilo actual (y continúe silenciosamente si no es el hilo correcto); Puedo ver cómo eso se pondría caro. No sé cómo configurar puntos de interrupción para hilos que no existen. –
Gracias, su respuesta fue útil sin embargo. Observé sin embargo que Xcode no funciona bien con esos puntos de interrupción. En el próximo lanzamiento de la aplicación, agrega estos puntos de interrupción de nuevo, pero sin respetar el parámetro del hilo. Entonces los puntos de interrupción terminan siendo activos para todos los hilos. Sin embargo, es mejor que nada para encontrar esas desagradables llamadas a UIKit en errores no principales. –