pry-rescue の使い方

エラーがキャッチされなかった場合に Pry を起動する。pry-stack_explorer を入れるとスタックの表示やスタックフレーム内での移動ができる。

group :development, :test do
  gem "pry" 
  gem "pry-rescue"
  gem "pry-stack_explorer"
end

参考:

ConradIrwin/pry-rescue: Start a pry session whenever something goes wrong – GitHub

pry/pry-stack_explorer: Walk the stack in a Pry session – GitHub

pry to the rescue | ‎cirw.in

How can I start Pry in Rails/Ruby automatically when any exception occurs, at the location of the raised exception – Stack Overflow

RSpec で使う

spec_helper.rb"pry-rescue/rspec"require する。

require "pry-rescue/rspec"

テストを実行する。

$ rake spec

環境変数で RESCUE の値を定義したときのみ Pry を起動するように設定する。

require "pry-rescue/rspec" if ENV.key?("RESCUE")

RESCUE=1 を指定して rake spec を実行する。

$ RESCUE=1 rake spec

参考:

RSpec – ConradIrwin/pry-rescue – GitHub

Minitest で使う

アサーションの失敗時に自動的に Pry が起動するので、minitest-byebug は不要。

test_helper.rb"pry-rescue/minitest"require する。

require "pry-rescue/minitest"

テストを実行する。

$ rails test

環境変数で RESCUE の値を定義したときのみ Pry を起動するように設定する。

require "pry-rescue/minitest" if ENV.key?("RESCUE")

RESCUE=1 を指定して rails test を実行する。

$ RESCUE=1 rails test

参考:

Minitest – ConradIrwin/pry-rescue – GitHub

rails server で使う

$ rescue rails server

参考:

Rails – ConradIrwin/pry-rescue: Start a pry session whenever something goes wrong – GitHub

How do I use pry-rescue in Rails? · Issue #4 · ConradIrwin/pry-rescue – GitHub

rails console で使う

> Pry::rescue { raise "Rescue me!!" }

参考:

Automatically prying uncaught Rails console errors? · Issue #64 · ConradIrwin/pry-rescue – GitHub

Rake タスクで使う

task :debug_task do
  Pry.rescue {
    raise "Error! Rescue me from here..."
  }
end

rescue コマンドを使って、rails コマンドではなく rake コマンドを呼び出すことでタスクの例外発生時に Pry を起動できる。(pry-rescue 1.5.0 以降)

$ rescue rake assets:precompile

参考:

pry rescue exit program immediately when error occurs · Issue #74 · ConradIrwin/pry-rescue – GitHub

Merge pull request #108 from abaldwin88/master · ConradIrwin/pry-rescue@1e77c7c – GitHub

Use pry-rescue In a rake Task? – Stack Overflow

cd-cause

例外の発生場所へ移動する。発生箇所が rescue ブロック内の場合、再度コマンドを実行するとオリジナルの例外発生箇所へ移動する。

> cd-cause

cd-cause コマンド実行前の位置に戻る。

> cd ..

参考:

cd-cause – ConradIrwin/pry-rescue – GitHub

try-again

編集したコードを再実行する。Rails あるいは Rack アプリケーションの場合は、同じリクエストが再度実行される。MiniTest あるいは RSpec の場合は、現在のテストが再実行される。Pry.rescue ブロックを使用している場合はブロックが再実行される。

参考:

try-again – ConradIrwin/pry-rescue – GitHub

pry-stack_explorer

スタックフレームを表示する。

> show-stack

指定したフレームに移動する。

> frame 6

上のフレームに移動する。

> up

下のフレームに移動する。

> down

show-stack コマンドのエイリアスを設定する。(~/.pryrc ファイルに以下の内容を記述する。)

if defined?(PryStackExplorer)
  Pry.commands.alias_command "@@", "show-stack"
end

エイリアス @@ でスタックフレームを表示する。

> @@

参考:

pry/pry-stack_explorer: Walk the stack in a Pry session – GitHub

pry/pry-stack_explorer Wiki – GitHub

Cucumber

参考:

Using pry-rescue to debug exceptions in Cucumber steps – Stack Overflow

Tried to inspect exception outside ワーニング

rescue の外部で raise された例外をキャッチした場合に警告が出る。

WARNING: Tried to inspect exception outside of Pry::rescue{ }

コメント:

We used to raise an exception at this point, but that turned out to not be very helpful as it obscured the original cause of the problem. I considered adding an explicit ‘raise e’ here, but decided against it on the grounds that the Pry::rescued call is normally in someone else’s error handler already.

翻訳:

嘗てはこの時点で例外を発生させていました。しかし、元の例外の発生要因がはっきりしないため、あまり役に立たないことがわかりました。明示的に元の例外 e を再発生させることも検討しましたが、Pry::rescue でラップされた呼び出しは通常、既に他のエラーハンドラの内部にあることがほとんどであるため、その案は却下されました。

警告とスタックトレースのみが表示される。

詳細な解析をするためには、rescued メソッドを改変して e.message を表示するか、raise e で例外を再発生させて外側の例外ハンドラで処理することもできる。

参考:

“.WARNING: Tried to inspect exception outside of Pry::rescue{ }” when trying to use from non-rails minitest test · Issue #58 · ConradIrwin/pry-rescue – GitHub

warn – pry-rescue/core_ext.rb at v1.5.0 · ConradIrwin/pry-rescue – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です