2010-08-26 17 views
1

En utilisant l'IRM 1.9Puis-je faire des valeurs de paramètre de méthode d'affichage ruby ​​dans un backtrace?

Lorsqu'une exception est levée qui provoque une backtrace à imprimer, il serait souvent immensément plus facile à déboguer si le backtrace a montré le récepteur et les valeurs des paramètres de la méthode ainsi que le nom de la méthode. Y a-t-il une manière de faire ça?

Pensez à des situations telles que le passage d'un profond nul dans le code de la bibliothèque qui ne s'y attendait pas, ou lorsque deux chaînes ont des codages incompatibles et une routine tente de les concaténer

Répondre

2

vous pouvez avec 1.8.6 en utilisant la gemme de backtracer.

1.9 a des rappels légèrement brisés donc n'est pas encore compatible, cependant. Je pourrais être en mesure de le faire fonctionner, si désiré.

Vous pouvez utiliser quelque chose comme un délégué et voir les paramètres à un seul objet:

 
class A 
    def go a, b 
    end 
end 

class A2 

    def initialize *args 
    @delegate = A.new *args 
    end 

    def method_missing meth, *args 
    p "got call to #{meth}", args.join(', ') 
    @delegate.send(meth,*args) 
    end 

end 

qui délivre en sortie

 
"in go2" 
"got call to go" 
"3, 4" 
+0

Je suppose que « non »/« pas encore », alors que le fait à le moins constitue une réponse, même si ce n'est pas celui que j'espérais ;-) Quand vous dites 1.9 a "cassé callbacks" est-ce une décision de conception ou juste un bug qui pourrait un jour être réparé? – telent

+0

c'est un bug, mais il peut y avoir un travail autour ... hmm ... – rogerdpack

+0

ne fonctionne pas avec ruby-2.1.3 :( – mpapis