Pregunta

Cuando me caigo (por razones que entiendo; ese no es el problema) cuando intento hacer algo que Cocoa no está bien, como llamar a un método que no existe o intente insertar NIL en un conjunto, el El depurador muestra la pila de main () a __pththread_kill, sin ninguno de los cuadros que estuvieron presentes cuando el código de bloqueo real funcionó. Hay un marco (9º de Main) llamado objc_exception_rethrow. Esto me lleva a creer que el tacto de cacao está tratando de hacer algo u otro para recuperar todas las excepciones y morir con gracia o algo. Sin embargo, es muy irritante cuando la depuración no tiene la capacidad de usar las herramientas de depuración de Xcode4 para investigar los marcos de pila de llamadas, o incluso ver dónde en mi código me estrellé.

¿Hay alguna manera de hacer que el comportamiento objc_exception_rethrow no suceda, y simplemente se bloquea tan pronto como se plantea una excepción? ¿Quizás haya un ajuste de depuración que lo hace chocar antes (en el derecho ? (Todavía no he enojado con ninguna de las configuraciones de construcción en este proyecto.)

¿Fue útil?

Solución 2

Encontré la respuesta: establecer un punto de interrupción en excepciones OBJ-C.Irá al depurador cuando se golpee objc_exception_throw, lo cual es bueno.Desafortunadamente, esto sucede antes de que se imprima la excepción, pero podemos hacer que eso suceda de todos modos (la mayoría de las veces) al configurar la acción del punto de interrupción (acción del depurador) po *(id *)($ebp + 8).

Otros consejos

No conozco ninguna configuración de Xcode que pueda deshabilitar la re-lanzamiento de excepciones.Por lo general, son re-arrojados por el tiempo de ejecución.Podría intentar ejecutar la aplicación sin el depurador adjunto y dejarlo caer.El informe de bloqueo debe contener una sección "Última excepción Backtrace", que le dará exactamente lo que necesita en este caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top