バックトレースの取得

僕はRubyでプログラムをデバッグするときには、デバッガを使わずにデバッグライトを直に埋め込んでいます。それもこれもRubyでは、関数pなどで簡単にオブジェクトの状態を表示できるからなんだけど…
で、そんなデバッグライトを使ってデバッグをする時に、バックトレースを簡単に取得したいなーと思って以下の関数を書いてみました。

def print_backtrace(mesg = 'XXX')
  begin
    raise mesg
  rescue RuntimeError => ex
    puts ex.message
    puts ex.backtrace[1 .. -1]
  end
end

こんな感じで使うと、

def hello
  puts 'Hello, world!!'
  print_backtrace 'some message'
end

hello

こんな出力が得られます。

Hello, world!!
some message
./test.rb:14:in `hello'
./test.rb:17