【Ruby】コールスタックを調査したい時(デバック)
Rubyのコードを読んでいて、「これはどれから呼ばれているんだろう?」
と思ったときに良い方法があったので、忘備録として残しておく。
組み込み関数caller
を使う
caller
を使う事で呼び出し元の情報を文字列の配列として取得できる。
サンプルプログラム(callstack_test.rb)
class TestClass
def foo
bar
end
def bar
baz
end
def baz
puts caller(0)
end
end
TestClass.new.foo
rubyを実行
$ ruby callstack_test.rb
test.ruby:11:in `baz'
test.ruby:7:in `bar'
test.ruby:3:in `foo'
test.ruby:15:in `<main>'
caller
の引数の指定によって、呼び出し元を変更できます。
(呼び出し元を含める場合は0を指定します。)
引数によって呼び出し元を変えることもできるが0
と1
以外はそんなに使わないと思う。
caller(0)で実行(呼び出し元を含める)
test.ruby:11:in `baz'
test.ruby:7:in `bar'
test.ruby:3:in `foo'
test.ruby:15:in `<main>'
caller(1)で実行(呼び出し元を含めない)
test.ruby:7:in `bar'
test.ruby:3:in `foo'
test.ruby:15:in `<main>'
caller(2)で実行(引数によって呼び出し元を指定できる)
test.ruby:3:in `foo'
test.ruby:15:in `<main>'
参考文献
Ruby 2.5.0 リファレンスマニュアル
https://rurema.clear-code.com/2.5.0/method/Kernel/m/caller.html
Author And Source
この問題について(【Ruby】コールスタックを調査したい時(デバック)), 我々は、より多くの情報をここで見つけました https://qiita.com/tetusan/items/b897528a1f6a3d607845著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .