163 votes

Comment déboguer les scripts Ruby?

Ruby n00b ici. J'ai copié le code Ruby suivant sur Internet et apporté quelques modifications.

 #insert code here
 

Mais ça ne marche pas!

S'il vous plaît aider. Que puis-je faire pour déboguer le programme moi-même?

152voto

banister Points 13181

Utilisez Pry: http://pry.github.com

115voto

germanlinux Points 1174
  1. En Ruby:

     ruby -rdebug myscript.rb 
     

    puis,

    • b <line> : mettre le point d'arrêt
    • et n(ext) ou s(tep) et c(ontinue)
    • p(uts) pour l'affichage

    (comme Perl Debug)

  2. In Rails: lance le serveur avec

     script/server --debugger
     

    et ajoutez debugger dans le code.

57voto

edx Points 201

Comme rampe recommandé: utiliser le soulever! Je peux qu'être d'accord sur ce point.

pry est une bien meilleure repl que la cisr.

Vous devez ajouter

require 'pry'

à votre fichier source et puis insérer un point d'arrêt dans votre code source en ajoutant

binding.pry

à l'endroit où vous voulez avoir un regard sur les choses (c'est comme le déclenchement d'un point d'arrêt dans un classique IDE environnement)

Une fois que votre programme de frappe de l'

binding.pry

ligne, vous serez jetés à droite dans la pry repl, avec tout le contexte de votre programme à portée de main, de sorte que vous pouvez simplement de découvrir tout ce que autour de, enquêter sur tous les objets, changer d'état, et même de modifier le code à la volée.

Je crois que vous ne pouvez pas modifier le code de la méthode que vous êtes actuellement de sorte que vous peut malheureusement pas changer la ligne suivante à exécuter. Mais bon code ruby a tendance à être une seule ligne de toute façon ;-)

20voto

Andrew Grimm Points 22996
  1. Imprimer les variables dans la mesure du possible. (Ce qui est appelé printf débogage), Vous pouvez le faire en cours d'exécution

    STDERR.puts x.inspect
    

    ou

    STDERR.puts "Variable x is #{x.inspect}"
    

    Si vous voulez faire plus facile de taper, vous pouvez utiliser le exemplor gem.

  2. Transformer les avertissements sur. Si vous êtes en cours d'exécution ruby puis l'exécuter avec l' -w switch (par exemple, ruby -w script.rb). Si vous êtes en cours d'exécution à partir de la cisr, et que vous utilisez une version de ruby avant 1.9.2, tapez $VERBOSE = true au début de votre session. Si vous avez mal orthographié une variable d'instance, une fois mises en garde, vous pouvez être

    avertissement: l'instance de la variable @valeus non initialisé

  3. Comprendre le concept d'un binaire chop (la citation suivante est tirée des Pratiques Agile Développeur)

    Diviser le problème de l'espace dans la moitié, et de voir qui contient la moitié du problème. Diviser ensuite la moitié de moitié à nouveau, et répéter.

  4. Si vous avez du succès avec un binaire hacher, vous pouvez trouver qu'il y a une seule ligne qui ne fait pas ce que vous attendez pour le faire. Par exemple

    [1, 2, 3].include?([1,2])
    

    donne une valeur de false, même si vous pensez que ça y retourner, true. Dans ce cas, vous souhaiterez peut-être consulter la documentation. Des sites Web pour la documentation des ruby-doc.orgou APIdock. Dans ce dernier cas, vous auriez du type include? de la loupe près du coin en haut à droite, choisissez l' include? qui a Array dessous (si vous ne savez pas quelle classe [1, 2, 3] est, tapez [1, 2, 3].class dans cisr), et vous aurez à les inclure? (Array), qui décrit ce qu'elle fait.

    Toutefois, si la documentation n'est pas l'aider, vous êtes plus susceptibles d'obtenir une bonne réponse si vous pouvez poser une question concernant la façon dont la ligne n'est pas ce qu'il devrait, plutôt que de savoir pourquoi un ensemble de script n'est pas de faire ce qu'il devrait.

6voto

NIA Points 1276

Toutes les autres réponses donnent déjà presque everyting... Juste un peu plus.

Si vous voulez un peu plus d'IDE débogueur (pas-CLI) et n'a pas peur de l'utiliser Vim comme éditeur, je vous suggère de Vim Ruby Débogueur plugin pour ça.

Sa documentation est assez straitforward, alors suivez le lien et voir. En bref, il vous permet de définir un point d'arrêt à la ligne en cours dans l'éditeur de vue des variables locales dans le nifty fenêtre sur pause, étape au-dessus/en - presque toutes les fonctionnalités du débogueur.

Pour moi, c'était assez agréable à utiliser ce vim débogueur pour le débogage d'une application Rails, bien que riche enregistreur de capacités de Rails presque élimine la nécessité pour elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X