42 votes

Comment puis-je accéder à l'invite IRB à partir d'un script en cours d'exécution?

Puis-je accéder à une invite IRB à partir d'un script Ruby en cours d'exécution?

Je souhaite exécuter un script, mais il doit ensuite me donner une invite IRB à un point du programme contenant l'état actuel du programme, mais pas uniquement en exécutant rdebug et en disposant d'un point d'arrêt.

46voto

banister Points 13181

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

C'est aussi facile que de mettre binding.pry au point où vous souhaitez démarrer 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

Levier vous permet de:

  • déposez-les dans une session à tout moment dans votre code
  • méthode de vue du code source
  • méthode de vue de la documentation (n'utilisant pas RI de sorte que vous n'avez pas à pré-générer)
  • pop dans et hors de différents contextes
  • la coloration syntaxique
  • résumé de l'intégration
  • la vue et la relecture de l'histoire
  • ouvrir les éditeurs à modifier les méthodes utilisant l' edit-method obj.my_method de la syntaxe

Une tonne de plus grands et des caractéristiques d'origine

29voto

Subba Rao Points 2117

vous pouvez utiliser ruby-debug pour avoir accès à irb

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

quand le programme atteint le débogueur, vous aurez accès à irb.

14voto

rogerdpack Points 12806

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 # :nodoc:
  def self.start_session(binding)
    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
 

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