Ruby 发生异常后是否继续将pry用作调试器?

Ruby 发生异常后是否继续将pry用作调试器?,ruby,pry,Ruby,Pry,发射撬: pry problem_12b.rb 这是我的控制台: 5: def divisors 6: return [1] if self == 1 7: primes, powers = self.prime_division.transpose 8: exponents = powers.map{|i| (0..i).to_a} 9: divisors = exponents.shift.product(*expone

发射撬:

pry problem_12b.rb
这是我的控制台:

     5: def divisors
     6:   return [1] if self == 1
     7:   primes, powers = self.prime_division.transpose 
     8:   exponents = powers.map{|i| (0..i).to_a} 
     9:   divisors = exponents.shift.product(*exponents).map do |powers| 
    10:     primes.zip(powers).map{|prime, power| prime ** power}.inject(:*) 
    11:   end 
    12:   divisors.sort.map{|div| [div, self / div]} 
 => 13:   binding.pry
    14: end
让我们一起玩这个游戏:

28.divisors
p divisors
#[1, 7, 2, 14, 4, 28]
酷。。。现在假设我想执行第12行。我可以这样做:

p divisors.sort.map{|div| [div, self / div]} 
#[[1, 28], [2, 14], [4, 7], [7, 4], [14, 2], [28, 1]]
我想说的是:
p行(12)
(您在此处插入代码),因为这不正确,它会爆炸

Exception: NoMethodError: undefined method `line' for 28:Fixnum
在它爆炸后,我如何后退到上面的第一个代码块。我唯一的选择不能是退出
撬动问题\u 12b.rb
是否再次出现

重述:

  • 如何通过撬行号执行代码
  • 如果我输入错误或它爆炸(异常),我如何恢复到以前的状态

  • 好吧,你不能在普赖尔做这件事。看看为什么这是困难的。您可以检查以解决此问题(提前放置断点,然后使用步骤向前移动等)。您可以编写高级(甚至全局)异常处理程序。您需要某种“调试标志”因此,此处理程序仅在调试时才处于活动状态。您永远不会希望在生产环境中使用此类处理程序。我可以为您的问题建议一个更具体的标题吗?例如:“在异常发生后继续使用pry作为调试器?”@JaredBeck让我们看看它是否有帮助!:)