Как перейти к приглашению IRB из запущенного скрипта? - PullRequest
41 голосов
/ 17 июля 2009

Можно ли перейти к приглашению IRB из запущенного сценария Ruby?

Я хочу запустить сценарий, но затем дать ему подсказку IRB в точке программы с текущим состоянием программы, но не только путем запуска rdebug и наличия точки останова.

Ответы [ 6 ]

45 голосов
/ 18 августа 2011

Pry (альтернатива IRB) также позволяет вам сделать это, фактически она была разработана с нуля именно для этого варианта использования:)

Это так же просто, как поставить binding.pry в точку, с которой вы хотите начать сеанс:

require 'pry'
x = 10
binding.pry

А внутри сеанса:

pry(main)> puts x
=> 10

Посетите сайт: http://pry.github.com

Прай давай тебе:

  • войти в сеанс в любой точке вашего кода
  • просмотр исходного кода метода
  • просмотр документации по методу (без использования RI, поэтому вам не нужно предварительно генерировать его)
  • входить и выходить из разных контекстов
  • подсветка синтаксиса
  • интеграция гист
  • просмотр и воспроизведение истории
  • открыть редакторы для редактирования методов, используя edit obj.my_method синтаксис

тонна более замечательных и оригинальных функций

29 голосов
/ 17 июля 2009

вы можете использовать ruby-debug для получения доступа к irb

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

когда программа достигает отладчика, вы получаете доступ к irb.

14 голосов
/ 27 января 2010

по-видимому, требуется кусок кода, чтобы попасть в irb.

Вот ссылка (похоже, хорошо работает).

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
9 голосов
/ 11 декабря 2016

Эта функция доступна в Ruby 2.4. Вы можете просто использовать binding.irb

Е.Г.

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

Если вы запустите код выше, вы получите консоль irb, чтобы вы могли проверять значения локальных переменных и все остальное, что находится в области видимости.

Источник: http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/

Рубиновый коммит: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

0 голосов
/ 06 февраля 2018

Я довольно поздно к игре, но если вы уже загружаете скрипт из irb / pry, простой raise также работает, чтобы вывести вас обратно в приглашение irb / pry. Я использую это довольно часто, когда пишу сценарии в консоли rails.

0 голосов
/ 01 ноября 2014

Просто добавьте эту строку туда, где вы хотите точку останова:

require 'ruby-debug';debugger

но я предлагаю использовать pry вместо irb, что очень удобно, вместо этого вставьте следующую строку:

require 'pry'; binding.pry

...