如何退出Ruby Pry会话并继续下一个语句?

时间:2014-06-28 23:05:51

标签: ruby exit next continue pry

我使用Pry gem(http://pryrepl.org)来测试我的程序。有时会出现异常,所以我使用这种语法:

require "pry"    
begin
  statement 1
  statement 2 *
  statement 3
rescue => e
  binding.pry
end

当"声明2"出现异常时我在救援条款中得到了一个撬开的话题。我可以检查我的变量等," e.backtrace"显示异常的原因,以及导致它的行等。然后我通常在源文件中进行一些更改以避免下次异常。但是我不想再次启动我的程序,因为很长一段时间再次到达"声明2"。所以我的问题是如何退出Pry会话并继续我的程序"声明3"?如果我尝试键入"继续"或" next"我只收到错误消息。

2 个答案:

答案 0 :(得分:1)

  

所以我的问题是如何退出Pry会话并继续我的   关于“声明3”的节目?

如果pry-debugger不适合你,那么:

require "pry"    

begin
  statement 1
  statement 2
rescue => e
  binding.pry
end

begin
  statement 3
rescue => e
  binding.pry
end

例如:

require 'pry'

def a
  puts 'a'
end

def b
  puts 'b'
  nil[1]
end

def c
  puts 'c'
end



begin
  a
  b
rescue => e
  binding.pry
end

begin
  c
rescue => e
  binding.pry
end

- 输出: -

~/ruby_programs$ r 1.rb 
a
b

From: /Users/7stud/ruby_programs/1.rb @ line 22 :

    17: 
    18: begin
    19:   a
    20:   b
    21: rescue => e
 => 22:   binding.pry
    23: end
    24: 
    25: begin
    26:   c
    27: rescue => e

[1] pry(main)> exit
c
~/ruby_programs$ 

当然,如果您的问题确实存在,那将无效,

  

如果我的程序在随机行上抛出错误,我怎么能撬到   继续执行下一行?

...

  

如果我尝试输入“继续”或“下一步”,我只会收到错误消息。

好的执行就在这里:

require "pry" 

begin
  statement 1
  statement 2 *
  statement 3
rescue => e
  binding.pry   #<== Pry executed here
end
#<=== Next line to execute after rescue clause

答案 1 :(得分:0)

我不认为可以更改源并在执行此操作后继续执行。我会尝试将pry语句放在语句2附近,然后重新运行。

statement 1
binding.pry
statement 2
statement 3