2009-07-17 6 views

Respuesta

27

puede utilizar rubí de depuración para obtener acceso a la IRB

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

cuando el programa alcanza depurador obtendrá acceso a la IRB.

+0

¿Tomará esto en cuenta el contexto obligatorio? ¿Puedo establecer el enlace a otra cosa? –

+0

Duh. Soy un idiota. ¡Gracias! –

+2

Esto requiere la gema 'ruby-debug', que no funciona con Ruby 1.9. – Zr40

14

aparentemente requiere una porción de código para caer en irb.

Aquí está el enlace (parece funcionar bien).

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

¡Excelente hallazgo, gracias! Esto es exactamente lo que necesitaba para acceder a la clase y las variables de instancia en el contexto de donde invocaba IRB.start_session (binding). – csmosx

44

Pry (una alternativa IRB) también le permite hacer esto, de hecho, fue diseñado desde el principio para exactamente este caso de uso :)

Es tan fácil como poner binding.pry en el punto en que desea iniciar la sesión:

require 'pry' 
x = 10 
binding.pry 

Y dentro de la sesión:

pry(main)> puts x 
=> 10 

consultar el sitio web: http://pry.github.com

palanca te permite:

  • gota en una sesión en cualquier momento de su código
  • vista de código fuente método
  • documentación del método vista (no usa RI para que no tenga que pregenerarlo)
  • pop in y out de contexto diferente s
  • resaltado de sintaxis
  • integración GIST
  • vista y reproducción historia
  • editores abiertos para editar métodos usando edit obj.my_method sintaxis

características Una tonelada más grandes y originales

+3

Guau, eso rocas. – Jeff

+1

Muchas gracias, este debería ser el primero, estaba en camino de usar IRB para eso – Dorian

0

Sólo añadir esta línea donde desea el punto de interrupción:

require 'ruby-debug';debugger

pero sugiero el uso de palanca en lugar de IRB, que es súper práctico, inserte la siguiente línea en su lugar:

require 'pry'; binding.pry

7

Esta característica está disponible desde Ruby 2.4. Solo puede usar binding.irb

P. ej.

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

Si ejecuta el código anterior, se llega consola IRB, por lo que se puede inspeccionar los valores de las variables locales y cualquier otra cosa que esté en el ámbito.

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

Rubí cometer: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

0

Estoy muy tarde para el juego, pero si va a cargar un script desde dentro IRB/Ya palanca, un simple raise también trabaja para hacer estallar usted volver al indicador irb/pry. Lo uso bastante a menudo cuando escribo uno de los scripts en la consola de rails.

Cuestiones relacionadas