Pry 调试
调用 Pry 调试
要调用调试器,在你的代码中某处放置 binding.pry。当 Ruby 解释器执行到这段代码时,程序会停止执行,你可以输入命令来调试程序的状态。
当调试 Puma 或 Sidekiq 等其他进程中的代码时,你可以使用 binding.pry_shell。
然后你可以通过使用 pry-shell 可执行文件连接到这个会话。
你可以观看 这个视频,了解更多关于如何使用 pry-shell 的信息。
binding.pry 偶尔可能会遇到自动加载问题并在名称解析时失败。
如果需要,可以使用 binding.irb 替代,但其功能集较为有限。
byebug 与 binding.irb 与 binding.pry
byebug 的界面与 gdb 非常相似,但 byebug 不使用强大的 Pry REPL。
binding.pry 使用 Pry,但缺少一些 byebug 的功能。GitLab 使用 pry-byebug gem。
这个 gem 将 byebug 的一些功能带到了 binding.pry 中,因此使用它可以获得最强的调试能力。
byebug
查看 文档 获取完整的命令列表。
你可以使用 pry 命令启动 Pry REPL。
binding.irb
从 Ruby 2.7 开始,IRB 自带了一个简单的交互式调试器。
查看 文档 了解更多信息。
pry
pry 中有 很多 功能,本文档无法全部涵盖,因此完整的文档请前往 Pry wiki。
以下是几个绝对值得一看的功能,也可以在 pry 会话中运行 help 来查看其他可用功能。
状态导航
通过 状态导航,你可以在代码中移动来发现方法等:
# Change context
[1] pry(main)> cd Pry
[2] pry(Pry):1>
# Print methods
[2] pry(Pry):1> ls -m
# Find a method
[3] pry(Pry):1> find-method to_yaml源码浏览
你可以在 pry 会话中 查看源代码:
[1] pry(main)> $ Array#first
# The above is equivalent to
[2] pry(main)> cd Array
[3] pry(Array):1> show-source first$ 是 show-source 的别名。
文档浏览
与源码浏览类似的是 文档浏览。
[1] pry(main)> show-doc Array#first? 是 show-doc 的别名。
命令历史
使用 Control + R 可以搜索你的 命令历史。
单步执行
要单步执行代码,你可以使用以下命令:
break: 管理断点。step: 单步执行到下一行或方法。可以接受一个可选的数字参数来多次执行。next: 在同一帧中跳到下一行。也可以接受一个可选的数字参数来跳过多行。finish: 执行直到当前栈帧返回。continue: 继续程序执行并结束 Pry 会话。
调用栈导航
你也可以使用这些命令在调用栈中移动:
backtrace: 显示当前栈。你可以使用左侧的数字与 frame 命令来导航栈。up: 将栈帧向上移动。可以接受一个可选的数字参数来移动多个帧。down: 将栈帧向下移动。可以接受一个可选的数字参数来移动多个帧。frame <n>: 移动到特定帧。不带参数调用时显示当前帧。
简短命令
当你使用 binding.pry 而不是 byebug 时,像 s、n、f 和 c 这样的简短命令不起作用。要重新安装它们,请将以下内容添加到 ~/.pryrc:
if defined?(PryByebug)
Pry.commands.alias_command 's', 'step'
Pry.commands.alias_command 'n', 'next'
Pry.commands.alias_command 'f', 'finish'
Pry.commands.alias_command 'c', 'continue'
end重复上一条命令
如果你将以下片段放在 ~/.pryrc 中,只需按 Enter 键(例如,使用 step 或 next)就可以重复上一条命令:
Pry::Commands.command /^$/, "repeat last command" do
_pry_.run_command Pry.history.to_a.last
endbyebug 默认支持此功能。