Programmation Ruby/Debuggueur

Un livre de Wikibooks.
Aller à : Navigation, rechercher

Sections

[modifier] Le mode DEBUG

Une première façon simple de faire est d'utiliser le mode DEBUG natif à Ruby :

  • Dans votre programme, placez vos instructions (vos traces) dans un bloc conditionnel avec un test sur la constante globale $DEBUG
  • Pour lancer le script en mode debug vous pouvez
    • utiliser ruby -d mon_script.rb
    • lancer irb avec irb -d
    • dans irb, entrer la commande $DEBUG=true

[modifier] Utiliser le debogueur

Ruby logo.svg Gem Ruby
ruby-breackpoint

Le debogueur est très simple à utiliser :

require 'breakpoint'
 
# du code...
 
breakpoint
 
# du code...

lancez votre script avec ruby. Dès que l'interpréteur rencontrera l'instruction breakpoint, il vous donnera la main via une session irb. Vous pourrez alors directement via l'interpréteur afficher le contenu des variables, faire des tests, injecter des données de test, utiliser la réflexion pour vérifier qu'un objet vérifie bien une propriété attendue, etc. Quittez la session irb et l'interpréteur reprendra là où il s'est arrêté.

[modifier] Breakpoints intelligents

Plutôt que de faire appel à breakpoint dans votre code, utilisez assert. Passez-lui un bloc de code à évaluer et assert ne vous donnera la main que si le résultat est faux.

Ainsi, assert ne vous propose une session irb que s'il semble qu'il y aie besoin d'inspecter l'état du programme.

[modifier] Corriger un code extérieur

Vous découvrirez parfois des problèmes dans du code dont vous dépendez (bibliothèques, gems diverses). Il peut s'agir de bogues ou de problèmes de sécurité ou de performances. Quoiqu'il en soit, ce problème vous ennui et vous devez le corriger.

Une première possibilité serait d'obtenir le code-source du code erroné, de le corriger et de construire l'application avec cette version. Cela pose évidemment des problèmes des mises à jour (il faudra fusionner vos corrections avec les modifications apportées par les nouvelles versions de la bibliothèque).

Ruby permet de résoudre ce problème simplement. Il vous suffit de redéfinir le code problématique. Supposons une classe problématique :

class Bibliotheque
  def une_methode()
    # du code erroné
  end
end

Il suffit de rouvrir la classe et de redéfinir la méthode. Au préalable, on créer un alias vers l'ancienne version pour des raisons de compatibilité.

class Bibliotheque
 
  alias :une_methode_BUG :une_methode
 
  def une_methode()
    # du code corrigé
  end
end

Cette méthode très efficace permet de contourner temporairement un problème. Bien sûr, proposez, dans la mesure du possible, votre correction aux auteurs de la bibliothèque concernée.

Outils personnels
Espaces de noms

Variantes
Actions
Bibliothèque
Navigation
Aide
Imprimer / exporter
Boîte à outils