バックトレースとは?
Rubyで、プログラムにエラーが発生した際に出力されるログのことです。
バックトレースの例
下記の例は、Ruby on Railsでルーティングエラーが発生した際のバックトレースになります。(フレームワークが絡んでくると、複雑な分バックトレースが非常に長くなります。)
1 2 3 4 5 6 7 8 9 10 11 |
ActionController::RoutingError (uninitialized constant Users): bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:53:in `block in load_missing_constant' bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:8:in `without_bootsnap_cache' bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:53:in `rescue in load_missing_constant' bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:42:in `load_missing_constant' activesupport (5.2.0) lib/active_support/inflector/methods.rb:283:in `const_get' activesupport (5.2.0) lib/active_support/inflector/methods.rb:283:in `block in constantize' activesupport (5.2.0) lib/active_support/inflector/methods.rb:281:in `each' activesupport (5.2.0) lib/active_support/inflector/methods.rb:281:in `inject' activesupport (5.2.0) lib/active_support/inflector/methods.rb:281:in `constantize' |
上から順番に、エラーの発生元になっているので、より原因に近いソースコードを確認できるので、より注意してみましょう。
一番下は、その発生元が呼ばれた最初のトリガーと言えます。
例外の種類
NameError
未定義のローカル変数や定数を呼び出した際に発生するエラーです。
NoMethodError
存在しないメソッドを呼び出した際に発生するエラーです。
TypeError
期待しない型(クラス)がメソッドの引数に渡された時に発生するエラー
ArgumentError
引数の数が違ったり期待値でなかった場合に発生するエラー
ZeroDivisionError
整数を0で割り算しようとした際に発生するエラー
SystemStackError
システムスタックがあふれた場合(メモリ不足)の際に発生するエラー
LoadError
requireやloadが失敗した際に発生するエラー
SyntaxError
構文エラー
ステップ実行をしたい場合
Rubyでプログラムをステップ実行させたい場合は「Byebug」というgemを使うことが多いです。
ブレークポイント用のソースコードを埋め込んでデバッグ用のコマンドを実行して1行ずつプログラムの実行を確認することができます。
IDE(RubyMine)
有償のIDEであるRubyMineを使えばブレークポイント用のコードを埋め込むことなくステップ実行をさせることができます。
販売元のページを見ればわかりますが、大体個人向けであれば年間1万円程度で購入することができます。Ruby開発がメインで趣味でもRuby開発をしている方は開発効率アップのために十分購入を検討しても良い値段ではありますね。
この記事へのコメントはありません。