Dans un code entièrement optimisé, il n'existe pas de moyen sûr à 100 % pour déterminer l'appelant d'une certaine méthode. Le compilateur peut employer une optimisation de l'appel de queue alors que le compilateur réutilise effectivement le cadre de la pile de l'appelant pour l'appelé.
Pour voir un exemple de ceci, placez 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 sans optimisation, vous auriez besoin de versions non optimisées de toutes les bibliothèques système pour éviter ce seul problème.
Et ce n'est qu'un seul problème ; en fait, vous demandez "comment réinventer CrashTracer ou gdb". Un problème très difficile sur lequel les carrières sont faites. À moins que vous ne souhaitiez faire des "outils de débogage" votre carrière, je vous déconseille de vous engager dans cette voie.
À quelle question essayez-vous vraiment de répondre ?
0 votes
Pourquoi voulez-vous faire ça ? Si c'est pour le débogage, il y a un ensemble de réponses très différentes que si vous voulez le faire en production (pour lequel la réponse est plus probablement "ne le faites pas").
4 votes
Je vais prendre la réponse du débogage
3 votes
Y a-t-il une réponse de la production ?