Dans un code entièrement optimisé, il n'existe aucun moyen fiable à 100% de déterminer l'appelant pour une certaine méthode. Le compilateur peut utiliser une optimisation d'appel de queue alors que le compilateur réutilise effectivement la trame de pile de l'appelant pour l'appelé.
Pour voir un exemple de ceci, définissez un point d'arrêt sur une méthode donnée en utilisant gdb et regardez le backtrace. Notez que vous ne voyez pas objc_msgSend() avant chaque appel de méthode. C'est parce que objc_msgSend() fait un appel de queue à l'implémentation de chaque méthode.
Bien que vous puissiez compiler votre application non optimisée, vous auriez besoin de versions non optimisées de toutes les bibliothèques système pour éviter ce problème.
Et c'est juste un problème; en effet, vous demandez "comment puis-je réinventer CrashTracer ou gdb?". Un problème très difficile sur lequel les carrières sont faites. À moins que vous ne vouliez que les «outils de débogage» soient votre carrière, je recommanderais de ne pas aller dans cette direction.
À quelle question tentez-vous vraiment de répondre?
Ceci est un anti-réponse. –
@alexgray Comment est-ce un anti-réponse?La réponse est exactement précise quant à la portée et à l'ampleur du problème et, compte tenu de l'acceptation et de la question finale, nous espérons que le PO sera sur la voie du succès. – bbum