最近、 rails で開発しているときに、set_trace_funcでエラー行を表示させるのが便利だったので、メモ。 gem で使っているライブラリも疑っていろいろ見ないといけないので、結構便利だ。
rails側では controllerか何かで適当に
require_relative "hogehoge" if Rails.env.development?
しておいて、hogehoge.rbには下に書いた感じで書くと、はかどった。
実際には、if文の条件をもっといろいろ追加して、余計な出力を出さないようにするが、大筋ではこんな感じ。
eventでc-callやらc-returnを指定すれば、cで書いたメソッドの呼び出しと戻りも表示できる、ということで、いろいろできそうだ。
require 'pp' set_trace_func lambda{|event, file, line, id, binding, klass| if event == "raise" # raise 例外が発生したファイル名と行番号を表示。 print "#{event} at #{klass}:#{id} #{file}:#{line}" # 例外が発生した場所でのローカル変数一覧を表示。 # railsではインスタンス変数やselfを表示させようとすると # 表示結果が多すぎて煩雑になる。 binding.eval(local_variables.map{|v|[v.to_s, eval(v)]}) .each{|name, val| print "#{name} = #{val.pretty_inspect}" } end }