2011-01-31 30 views
3

我們有一個相當大的Rails應用程序,我已經開始在我們的unicorn.log輸出:發現在Ruby代碼寄生放

 
#:0xc644248>#:0xc644248>#:0xc4f06e4>#:0xc4f06e4>#:0xca481b4>#:0xca481b4>#:0xc53f604>#:0xc53f604>#:0xcd7a60c>#:0xcd7a60c>#:0xc5df2f8>#:0xc5df2f8>#:0xc69fd00>#:0xc69fd00>#:0xc560ae8>#:0xc560ae8> 

在我看來,像有可能是一個流浪Kernel.puts方法打電話到某個地方,但我一直在尋找幾個小時,找不到它。

任何人有跟蹤這樣的事情的提示?

+0

由於輸出不包含任何換行符,我開始認爲這是一個打印電話,而不是放置。 – 2011-01-31 18:24:31

+0

這也可能是對pp的調用,它似乎無法通過打印或將 – 2011-01-31 18:33:09

回答

2

您是否檢查過display?這是另一種打印出來的方法。

8

你可以猴子補丁放置,並在被調用時引發異常。你甚至可以用你的輸出字符串上的正則表達式匹配(它看起來像遞歸對象轉儲)。

module Kernel 
    def puts (s) 
    raise "puts called, check the backtrace for the source" if s =~ /#:[a-z0-9]>*/ 
    end 
end 

它也可能是它不是一個調用put,而是#inspect。

+1

+1。這是一個非常好的解決方案。 – 2011-01-31 14:34:41

1

你可以去了所有的文件,搜索到Kernel.puts任何電話,就像這樣:

find -iname "*.rb" | xargs grep -iR 'Kernel.puts' 

然而,整潔和效力方面,我可能會去提供的解決方案由Jeff Paquette提供。

0

這是我使用的,它與Banang的答案類似,但可能更簡單。從這樣的目錄做一個grep:

grep -rn'puts'。

當然,它會搜索所有內容,但是您可以在任何您想限制的目錄中運行它。這應該給你你需要的文件和行號。您可以根據需要微調搜索條件。