【发布时间】:2012-07-18 15:05:13
【问题描述】:
在编写 ruby 代码时,我常常很难调试无限递归。有没有办法从SystemStackError 中获取回溯以找出无限循环到底发生在哪里?
示例
给定一些方法foo、bar和baz在循环中相互调用:
def foo
bar
end
def bar
baz
end
def baz
foo
end
foo
当我运行此代码时,我只会收到消息test.rb:6: stack level too deep (SystemStackError)。至少获取堆栈的最后 100 行会很有用,所以我可以立即看到这是 foo、bar 和 baz 之间的循环,如下所示:
test.rb:6: stack level too deep (SystemStackError)
test.rb:2:in `foo'
test.rb:10:in `baz'
test.rb:6:in `bar'
test.rb:2:in `foo'
test.rb:10:in `baz'
test.rb:6:in `bar'
test.rb:2:in `foo'
[...]
有没有办法做到这一点?
编辑:
正如您从下面的答案中看到的那样,Rubinius 可以做到。不幸的是,一些rubinius bugs 阻止我将它与我想调试的软件一起使用。所以准确来说问题是:
如何使用 MRI(默认 ruby)1.9 获得回溯?
【问题讨论】:
标签: ruby