2009-07-17 6 views

Répondre

27

vous pouvez utiliser-debug Ruby pour obtenir l'accès à iRB

require 'rubygems' 
require 'ruby-debug' 
x = 23 
puts "welcome" 
debugger 
puts "end" 

lorsque le programme atteint débogueur vous aurez accès à RIR.

+0

Cela tiendra-t-il compte du contexte contraignant? Puis-je définir la liaison à autre chose? –

+0

Duh. Je suis un idiot. Merci! –

+2

Cela nécessite le gem 'ruby-debug', qui ne fonctionne pas avec Ruby 1.9. – Zr40

14

apparemment il faut un morceau de code pour tomber dans irb.

Voici le lien (semble bien fonctionner).

http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application


require 'irb' 

module IRB 
    def self.start_session(binding) # call this method to drop into irb 
    unless @__initialized 
     args = ARGV 
     ARGV.replace(ARGV.dup) 
     IRB.setup(nil) 
     ARGV.replace(args) 
     @__initialized = true 
    end 

    workspace = WorkSpace.new(binding) 

    irb = Irb.new(workspace) 

    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC] 
    @CONF[:MAIN_CONTEXT] = irb.context 

    catch(:IRB_EXIT) do 
     irb.eval_input 
    end 
    end 
end 
+2

Excellente trouvaille, merci! C'est exactement ce dont j'avais besoin pour accéder aux variables de classe et d'instance dans le contexte de l'invocation de IRB.start_session (binding). – csmosx

44

Pry (un IRB alternatif) permet également de faire cela, en fait, il a été conçu à partir du sol pour exactement ce cas d'utilisation :)

Il est aussi facile que de mettre binding.pry au point où vous voulez commencer la session:

require 'pry' 
x = 10 
binding.pry 

Et à l'intérieur de la session:

pry(main)> puts x 
=> 10 

Consultez le site Web: http://pry.github.com

Pry vous permettent de:

  • goutte dans une session à tout moment dans votre code
  • Afficher le code source de la méthode
  • vue de la documentation de la méthode (n'utilisant pas RI donc vous n'avez pas à le pré-générer)
  • entrer et sortir du contexte différent s
  • coloration syntaxique
  • intégration essentiel
  • vue et historique relecture
  • éditeurs ouverts à modifier les méthodes utilisant edit obj.my_method syntaxe

Une tonne de plus grandes et des caractéristiques originales

+3

Wow, ça berce. – Jeff

+1

Merci beaucoup, cela devrait être au sommet, j'étais sur le point d'utiliser IRB pour ça – Dorian

0

Ajoutez simplement cette ligne à l'endroit où vous voulez le point d'arrêt:

require 'ruby-debug';debugger

mais je suggère au lieu de l'utilisation pry RIR, ce qui est super pratique, insérez la ligne suivante à la place:

require 'pry'; binding.pry

7

Cette fonction est disponible à partir de Ruby 2.4. Vous pouvez simplement utiliser binding.irb

E.g.

require 'irb' 
a = 10 
binding.irb 
puts a 

Si vous exécutez le code ci-dessus, vous obtiendrez console RIR, de sorte que vous pouvez vérifier les valeurs des variables locales et toute autre chose qui est portée.

Source: http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/

Ruby commit: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

0

Je suis assez tard pour le jeu, mais si vous chargez un script à partir de RIR/Pry déjà, un raise simple fonctionne aussi vous pop revenir à l'invite irb/pry. Je l'utilise assez souvent lors de l'écriture d'un des scripts dans la console rails.

Questions connexes