本章讲了如何定位❌,和排除bug. git
Pry (5000🌟)github
a Ruby console. 能够替代irb。增长了一些配合的gems,是一个杰出的debugger工具。shell
使用:在测试和开发环境使用:数据库
gem "pry-rails" # 取代irb ,在命令行输入pry
json
⚠️,安装pry时,在gem文件内输入gem 'pry-rails', :group => :development后这样才能取代rails console。 ruby
gem "pry-byebug" session
#(文档要求放在:test内,或者全局内)(1300+🌟) 特色:用binding.pry一步一步的除错。app
gem "pry-stack_explorer" (#350🌟) ide
#使用show-stack命令 来go up and down the stack trace工具
gem "pry-rescue"
尝试使用pry:
rails console:搜索数据库记录,显示更清晰,字段用不一样颜色标记,更容易分辨。
Pry容许检查做用域下的当前对象, 当输入self,返回顶级做用域main.
Pry使用Unix目录导航来读取对象树。 因此在Pry内输入ls:
会返回一个目录 是关于当前命名空间的事物:
包括当前对象可使用的方法和本地变量。其中project是以前建立的变量。
输入cd project就能够进入project对象的做用域了:
pry(#<Project>):1>
再输入self ,能够显示当前对象project的信息。
和命令终端同样,输入cd..返回上一级目录,输入cd返回最初目录。
若是在 pry(#<Project>):1> ls
将会返回a bunch of stuff,一大堆project能够响应的方法(很是多,使用q加回车返回)
ls -h调用帮助信息。⚠️主要几个:
-m, --mehtods 显示公共方法
-M, --instance-methods 显示定义在模块或类中的方法
-i, --ivars 显示instance variables(蓝色)和类变量(亮蓝色)
show-source(当前做用域对象的方法名)
pry(#<Project>):1> show-source on_schedule?会显示这个方法的具体信息
包括储存位置。方法的定义。
show-method和show-source彷佛返回结果同样。没看文档。
show-doc查看Ruby核心方法。须要安装gem pry-doc
和irb同样 _ 能够显示最近使用的结果, _ex_显示最近raised exception.
使用Pry 来定位测试失败的位置
这是gem 'pry-byebug'中的方法。
在Rspec中使用,须要require 'pry'
使用binding.pry方法 和gem ‘byebug’的一些功能相似。
continue,继续执行程序直到结束
finish: 继续执行直到当前frame结束
next: 继续执行当前frame内的命令
step: 跳过当前,进入下一个frame。
你能够在测试任何地方插入binding.pry,你会获得当前做用域的所有内容。
例子:
binding.pry
到了binding.pry一行,就会进入Pry,和周边的做用域。能够直接进行各类操做。
也能够把pry发送给任何对象。好比使用creator.pry,测试时直接进入Pry,位置是本地变量creator,creator会做为顶级做用域显示:
这里可使用edit命令, edit -c来打开binding.pry所定位的文件。 edit ClassName#method打开这个文件的方法。也能够打开实例变量,具体看edit -h方法。
在你修改完成后,会重新加载文件,让你继续。
加载gem 'pry-stack_explorer'
⚠️ 和pry-byebug不兼容,能够一块儿用,但可能出现问题。
pry-stack_explorer是一个插件,能够用于Pry REPL模式的开发, 让使用者能够在call-stack上进行导航。用户能够上下移动,检查state 甚至求代码的值evaluate code.
支持(点击查看文档): up
, down
, frame
and show-stack
视频1,在frame直间移动查看
https://asciinema.org/a/eJnrZNaUhTl12AVtnCG304d0V
说明:先输入show-stack,列出了目前为止的程序运行路径,包括调用了什么方法什么block。而后能够根据路径号,好比输入frame 9,便可查看这个方法的细节。
视频2,在一个caller中修改state
https://asciinema.org/a/0KtCL9HB1bP08wNHLfIeOMa8K
说明: 输入show-stack后,想要变动frame7的输出。使用up 7到达7,而后修改state,会对以后的执行产生变化。
show-stack命令显示当前的backtrack
up命令移动到父frame.接受数字或字符串做为查询条件
frame命令移动到指定的frame.
⚠️。frame up down的区别没有弄明白
rescue rspec
使用这个命令进行测试,当出现错误的时候,Pry会当即进入这个❌的位置。
如:
rescue rspec spec/workflows/creates_project_spec.rb
弹出一大坨:
一块儿使用这些工具 能给你一个很是互动式的工做流。 后期运行测试经过rescue, 掉进Pry失败处,而后editing,而后再尝试直到测试经过。
⚠️,在pry内修改后再,try-again仍然会报告❌,因此尽可能不使用。
另外rspec bisect ,bisect是一个隔离失败测试的系列方法,没有看。
几点提示:
Wiki
edit Class#method, edit my_method
)cd
, ls
and friends)
Pry提供了灵活的用户客制化。
pry --help
配合cd, cd .., ls使用。
edit Class, edit Class#method, edit my_method均可以定位到不一样的位置。
^X是退出的意思ctrl+x. ^表明control按键。
^O是writeout写出:保存修改的文件。 看提示而后回车就好了。
^G是帮助。
Live Help System
输入help则显示因此Pry能够用的命令。
详细的使用 command_name --help
使用gem pry-rails 能够替代默认的rails console:
在加载了Rails console helper 以外还增长了一些有用的命令。
Command Shell Integration (未弄明白)
使用 shell-mode来把当前工做目录合并进Pry prompt并附带上彻底的文件目录名。具体的不懂。