J'ai hérité d'un gros paquet de code Ruby, franchement, impossible à comprendre pour un mortel comme moi. C'est en fait le code de test unitaire de Rspec, mais la structure est "très inhabituelle" pour le dire gentiment.Comment enregistrer toutes les méthodes appelées dans un programme Ruby?
Ce que je voudrais être en mesure de faire est de lancer le code, et ont les informations suivantes connecté quelque part:
- chaque méthode qui obtient invoquée, y compris le nom de la classe qui définit la méthode, et le nom de fichier où la méthode invoquée a été définie (oui, nous avons la même classe/méthode définie dans plusieurs fichiers différents, et il est difficile de savoir lequel est appelé)
- (facultativement) les paramètres passés à chaque méthode invoqué
Avec ça, je pourrais commencer à essayer de le refactoriser. Sans cela, il sera très difficile de le résoudre, en raison de la taille de la base de code (20k + unités de test unitaires).
Je ne peux pas me permettre d'effectuer des modifications en gros sur le code en cours d'exécution, car cela casse lorsque vous utilisez même un langage sévère (c'est-à-dire fréquemment). Au lieu de cela, j'ai besoin d'être en mesure d'instrument le code dans son état existant, ou avec des changements minimes à ce qui existe maintenant.
Existe-t-il un moyen de consigner ce niveau de détail sans apporter de modifications importantes à la base de code? J'ai jeté un coup d'œil au profileur Ruby pour voir si cela pouvait aider, et ça pourrait probablement; Je suis curieux de savoir s'il existe un meilleur moyen (en particulier de consigner le nom du fichier contenant la méthode invoquée).
Merci à l'avance
Avez-vous considéré comme un analyseur statique ou êtes-vous ne cherchez quelque chose qui fonctionne en fait le code? Doxygen affiche de jolis graphes appelant/appel, n'a pas cherché à savoir s'il supporte Ruby mais les graphiques d'appel peuvent s'avérer très utiles pour comprendre le code existant. –
Je suis à peu près sûr que Doxygen ne supporte pas Ruby - si c'était le cas, cela me serait certainement utile, mais je ne trouve aucune information à propos de Doxygen supportant Ruby. Je préférerais avoir quelque chose qui exécute réellement le code, principalement parce que l'ordre dans lequel require est traité traitera lequel des multiples définitions (non identiques) d'une méthode donnée sera utilisé. Comme je l'ai dit, c'est une base de code moche ... – monch1962