Souvent je reçois difficile à déboguer infini récurrences lors du codage de ruby. Est-il possible d'obtenir une trace d'un SystemStackError
pour le savoir, où exactement la boucle infinie se produit?
Exemple
Compte tenu de certaines méthodes d' foo
, bar
et baz
qui s'appellent les uns les autres dans une boucle:
def foo
bar
end
def bar
baz
end
def baz
foo
end
foo
Lorsque j'exécute ce code, je viens d'obtenir le message d' test.rb:6: stack level too deep (SystemStackError)
. Il serait utile d'obtenir au moins les 100 dernières lignes de la pile, de sorte que je pouvais voir immédiatement ce est une boucle entre foo
, bar
et baz
, comme ceci:
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'
[...]
Est-il un moyen pour accomplir cette?
EDIT:
Comme vous pouvez le voir à partir de la réponse ci-dessous, Rubinius peut le faire. Malheureusement, certains rubinius bugs m'empêcher de l'utiliser avec le logiciel que j'aimerais debug. Donc, pour être précis, la question est:
Comment puis-je obtenir un backtrace avec l'IRM (la valeur par défaut ruby) 1.9?