スキップしてメイン コンテンツに移動

Rubyデバッグbinding

Rubyデバッグbinding

Ruby実践でデバッグツールを活用する

Ruby開発では、コードのバグを素早く発見し修正するためにデバッグツールが不可欠です。標準ライブラリに含まれる byebugpry などは、ステップ実行や変数確認を簡単に行えるため、日常的に利用されます。特に debug gem は Ruby 3.1 以降で公式にサポートされ、より軽量で高速なデバッグ体験を提供します。

debug gemとbinding.breakでステップ実行

debug gem を使うと、binding.break を任意の位置に挿入するだけで実行を一時停止できます。以下は簡単な例です。

require 'debug'

def calculate(a, b)
  binding.break
  a + b
end

puts calculate(3, 4)

実行すると、デバッガが起動し、現在のスコープの変数やコールスタックが表示されます。ここから step コマンドで一行ずつ実行したり、continue で再開したりできます。

変数確認とコールスタックの読み取り

デバッグセッション中に pputs を使って変数の値を確認することは基本です。debug gem では frame コマンドで現在のフレームを表示し、locals でローカル変数を一覧できます。また、backtrace でコールスタックを確認し、どのメソッドから呼び出されたかを追跡できます。

debugger> frame
# 0  calculate(3, 4) at example.rb:3
debugger> locals
a = 3
b = 4
debugger> backtrace
0: calculate(3, 4) at example.rb:3
1: main at example.rb:6

トラブルシューティングのベストプラクティス

デバッグ中に思わぬエラーが発生した場合、まずは binding.break を挿入した位置を確認し、期待通りに停止しているかをチェックします。次に、変数の型や値を p で確認し、想定外のデータが流入していないかを検証します。コールスタックを辿ることで、問題の根源がどのメソッドにあるかを特定できます。

さらに、デバッグツールのログレベルを上げることで、内部で何が起きているかを詳細に把握できます。debug gem では Debug::Logger.level = :debug を設定すると、実行フローやメモリ使用量などの情報が出力されます。

この記事はAIによって作成されました。

コメント