XCode et "Caller Graph"
Buno
Membre
Hello z'à tous!
Existe-t-il une feature dans XCode permettant de connaà®tre les différents appelants d'une méthode? Pour ceux qui connaissent Visual Studio, je veux parler du "Show Caller Graph".
Existe-t-il une feature dans XCode permettant de connaà®tre les différents appelants d'une méthode? Pour ceux qui connaissent Visual Studio, je veux parler du "Show Caller Graph".
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais il y a toujours clic droit -> Find in Project -> As symbol
Bon ou sinon tu peux utiliser les outils de profiling, faire tourner ton appli et voir les caller graphs qui se construisent dynamiquement au fur et à mesure des appels qui sont faits, mais bon c'est pas ça non plus.
C'est con: l'outil Refactor le fait bien pourtant... mais c'est moins pratique à utiliser
(J'avais vu une vidéo de présentation de libclang, genre comment faire un programme d'analyse de code en quelques lignes de C grace à cette API c'est pas mal foutu au passage)
D'abord du fait de l'héritage, il n'est pas simple d'identifier les appelants réels de chaque méthode de chaque sous-classe. Une variable peut être déclarée d'une classe particulière, mais contenir une référence à une instance d'une sous-classe dans laquelle la méthode appelée est redéfinie.
En plus, Objective-C est un langage dynamique ; la résolution des méthodes est faite à l'exécution. On peut stocker des sélecteurs dans des variables, des collections, ... et les utiliser plus tard pour envoyer des messages. C'est comme ça comme fonctionne le pattern Target-Action.
Une vidéo très intéressante sur le sujet : Libclang : Thinking beyond the compiler. Cette vidéo montre comment avec quelques lignes de C on peut analyser le code source d'un programme et récupérer les tokens représentant les symboles, l'AST, et tout ce qui est nécessaire pour l'analyse de code.
Donc avec ça il serait certainement possible de créer un outil qui permet d'afficher le "Call Graph" correspondant à une méthode de ton code (voire à intégrer ça dans une sorte d'extension à Xcode, si une telle possibilité existe ?), après je dis pas que ça serait simple à faire, ça reste un problème non trivial, mais il y a déjà des outils et libs pour l'analyse de code qui te décortiquent le terrain. Le problème n'est pas donc vraiment technique puisqu'Xcode devrait avoir déjà de bonnes bases avec libclang pour faire cela. C'est juste qu'ils ne l'ont pas implémenté chez Apple.