调试 Ruby 代码需要两个 gem:
pry 和
pry-byebug。
下面是一个简单的 Ruby 脚本,它将两个数字相加并打印它们的和。请注意底部的
binding.pry
语句。此语句添加了一个断点,并告诉 Ruby 在该点停止执行。在这一点上,我们可以检查当前状态,进出方法,退出或继续执行。
require "pry"
require "pry-byebug"
class Sandbox
def add(a, b)
sum = a + b
sum
end
end
puts "Welcome to the Sandbox"
binding.pry
box = Sandbox.new
sum = box.add(3, 4)
puts "Sum = #{sum}"
如果您在终端中运行此代码,您将看到以下代码。Pry会暂停程序,终端正在等待您的输入。请注意行号旁边的箭头,它告诉您控制流程所在的位置。
➜ sandbox (main) ✗ ruby lib/sandbox.rb
Welcome to the Sandbox
From: /../sandbox/lib/sandbox.rb:15 :
10:
11: puts "Welcome to the Sandbox"
12:
13: binding.pry
14:
=> 15: box = Sandbox.new
16: sum = box.add(3, 4)
17:
18: puts "Sum = #{sum}"
[1] pry(main)>
在终端上输入
next
以进入下一行。
[1] pry(main)> next
From: /../sandbox/lib/sandbox.rb:16 :
11: puts "Welcome to the Sandbox"
12:
13: binding.pry
14:
15: box = Sandbox.new
=> 16: sum = box.add(3, 4)
17:
18: puts "Sum = #{sum}"
[1] pry(main)>
在终端中输入“step”以进入add方法。Pry将带你进入“add”方法。
[1] pry(main)> step
From: /../sandbox/lib/sandbox.rb:6 Sandbox
5: def add(a, b)
=> 6: sum = a + b
7: sum
8: end
在调试期间,您可以通过在终端中键入“ls”或仅键入变量名称来检查本地变量。例如,键入
a
会显示
a
变量的值。
[1] pry(#<Sandbox>)> a
=> 3
在调试过程中,如果发现自己处于框架代码中,可以输入
up
来退出该方法,这将使您回到堆栈的上一级。我经常这样做。
[2] pry(#<Sandbox>)> up
From: /Users/akshayk/Dev/ruby/sandbox/lib/sandbox.rb:16 :
11: puts "Welcome to the Sandbox"
12:
13: binding.pry
14:
15: box = Sandbox.new
=> 16: sum = box.add(3, 4)
17:
18: puts "Sum = #{sum}"
继续执行直到控制命中下一个断点,输入
continue
。输入
exit
退出调试。
如果您想随时查看当前位置,请输入
@
或
whereami
,pry会显示当前断点。当您在阅读帮助文档(在调试期间在终端中键入help)或清空终端并想要查看执行位置时,可能会发现这很有帮助。
那基本上就是如何调试Ruby代码了。希望这有所帮助。
来源:
如何调试Ruby代码
pry-byebug
和pry
来暂停、检查、继续执行以及进入和退出方法,可以查看我的答案获取更加实时的回答。 - software_writer