XCode et "Caller Graph"

BunoBuno Membre
22:34 modifié dans Xcode et Developer Tools #1
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".

Réponses

  • AliGatorAliGator Membre, Modérateur
    22:34 modifié #2
    Malheureusement je ne crois pas qu'il existe un moyen de voir le caller graph (ou s'il y en a un je suis preneur aussi)
    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.
  • BunoBuno Membre
    22:34 modifié #3
    Effectivement, je ne trouve rien.
    C'est con: l'outil Refactor le fait bien pourtant... mais c'est moins pratique à  utiliser
  • AliGatorAliGator Membre, Modérateur
    22:34 modifié #4
    L'outil Refactor utilise libclang pour trouver toutes les références au symbole à  renommer. Ce n'est pas du "Call Graph" mais plutôt un "Find all references" (et ça tu peux le faire comme je t'ai indiqué). L'outil Refactor n'a pas besoin de savoir qui appelle ta méthode pour renommer les appels, il analyse le code et trouve les occurrences du symbole en validant que c'est bien le même symbole (et non un symbole de même nom mais différent)

    (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)
  • jpimbertjpimbert Membre
    22:34 modifié #5
    Ce n'est vraiment pas simple comme problème ...

    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.
  • AliGatorAliGator Membre, Modérateur
    mars 2011 modifié #6
    jpimbert : certes ce n'est pas simple comme problème, mais si Apple voulait intégrer cette fonctionnalité je pense qu'ils pourraient car ils ont déjà  tout ce qu'il faut : avec libclang qui te fait l'analyse tout seul de tout ton code et toute sa syntaxe, transforme ton code en AST (Abstract Syntax Tree = tokens de type symboles, variables, objets, etc) tu as à  priori toutes les infos nécessaires.

    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.
Connectez-vous ou Inscrivez-vous pour répondre.