En un código completamente optimizado, no hay una manera 100% segura de determinar quién llama a un método determinado. El compilador puede emplear una optimización de cola de llamada mientras que el compilador reutiliza eficazmente el marco de pila de la persona que llama para el destinatario.
Para ver un ejemplo de esto, establezca un punto de interrupción en cualquier método dado usando gdb y observe la traza inversa. Tenga en cuenta que no ve objc_msgSend() antes de cada llamada a un método. Eso es porque objc_msgSend() hace una llamada de cola a la implementación de cada método.
Si bien podría compilar su aplicación no optimizada, necesitaría versiones no optimizadas de todas las bibliotecas del sistema para evitar solo este problema.
Y esto es solo un problema; en efecto, usted está preguntando "¿cómo reinicio CrashTracer o gdb?". Un problema muy difícil sobre el cual se hacen carreras. A menos que desee que su "carrera profesional" sea una herramienta de depuración, recomendaría no seguir por este camino.
¿Qué pregunta estás tratando de responder?
Esto es una respuesta negativa. –
@alexgray ¿Cómo es una respuesta negativa?La respuesta es exactamente precisa en cuanto al alcance y la escala del problema y, dada la aceptación y la pregunta final, es de esperar que guíe a la OP por el camino hacia el éxito. – bbum