もふもふ技術部

binding.pryでループ内にブレイクポイント仕掛けるとだるいことになる


背景

binding.pryはRailsアプリケーションのコード中にブレイクポイントを仕掛けてデバッグ出来る優れものなんですが、困ったことにループ処理の中にブレイクポイントを仕掛けちゃうと、あれやこれやコマンド叩いても抜けられなくて、毎回Ctrl+CでWEBサーバごと終了なんてことしてた。

そのたびにまた rails s でサーバ起動させたりでめんどい。どうやったら解決できるかちょっと探ってみた。pryのhelpコマンドで表示されるコマンドをいくつか試してみたのでログっておきます。

helpで調べたコマンドをいくつか叩いてみる

こんなコードで試してます。
ラーメン屋テーブルを検索してeachで処理する中にブレイクポイント(binding.pry)を仕掛けます。

helpを参照出来ます。

ls
pryのコマンドですね。オブジェクトのメソッドや変数を確認できる。nameはString型なのでString型のメソッドなどが列挙されます。

raise-up
例外を発生させます。例外処理の実装するときとかに使えそう。

whereami
これ知らなかったんだけど結構必要だと思う。lsとかコマンド叩くと、画面が情報で埋まってしまって、いまどこにいるかわからなくなってしまいます。そこで再びブレイクしている付近のコードを表示することが出来るというもの。

hist
pryで叩いたコマンドの履歴を確認出来ます。使うかな?わからん。

show-source
引数なしで叩くと、今ブレイクしているメソッドのソースが表示された。

[5] pry(#)> show-source

!!!
exit-programコマンドのエイリアス。今回見つけたかったコマンド。ブレイクを終了させます。例外で終了するみたい。本当は例外じゃなくて以降全てをコンティニューする感じで終了するのが欲しかったのだけれど。

!!@
exit-allのエイリアス。全部終了?ループ内で叩いても終了せずまたブレイクしてしまった。exitコマンドと何が違うんだろう。

n
nextのエイリアス。
これは頻繁に使いますね。多分一番使うんじゃないですかね。次の行へ進む。

s
stepのエイリアス。
ブレイクしている行で実行しているメソッドなどにステップインする。これも比較的よく使いますね。

disable-pry
これでループからも抜けてしかも例外になることなく処理を継続することが出来た。が、以降はブレイクポイントで止まらなくなる。pry-debugそのものがdisableになったみたい。サーバ再起動すれば元に戻ります。おしいな。これじゃない。

一番探しているのに近かったのは!!!ということでファイナルアンサー。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。