2012-01-18 55 views
1

讓我澄清這一點...如何調試Ruby的method_missing?

我有一個處理XML文件的類。該類實現method_missing,並使用傳遞的方法作爲標記的標識符,然後返回表示該標記的XML節點的對象。該代碼是或多或少是這樣的:

def method_missing(m, *args, &block) 
    XmlNode.new(@xml.at_css(m.to_s.upcase)) 
end 

我已經做了一些奇怪的,不過,有時m參數沒有被髮送到方法調用。

有沒有辦法讓我確定哪些電話是罪魁禍首?

我可以想到的一種方法是記錄方法調用本身,但是如何在method_missing中執行此操作?

+0

如果你知道哪個請求導致問題,那麼你可以使用'中止object_name.to_yaml' – 2012-01-18 16:42:40

回答

1

一種非常原始的方法是將輸出調用堆棧通過把

puts caller 

右上方您的XmlNode ...線。這將輸出調用堆棧,你可以看到誰調用了該方法。

+0

謝謝。這是相當粗糙的,並沒有直接指向罪魁禍首,但它大大減少了嫌疑人的數量。 – cassianoleal 2012-01-18 17:29:15

+0

+1,但在printf調試時在變量後面加上'inspect'通常是個好主意。 – 2012-01-19 07:38:30