2014-02-22 59 views
-1

如果method A被其他方法調用,如何獲取/回溯方法調用堆棧

有沒有辦法知道哪些功能在運行時調用它。

我可以grep整個項目列出所有可能的調用路徑,

但如果我能在運行時知道它,它會更有幫助。

我怎樣才能得到它通過嵌入東西method A

例如,呼叫流程也許

C() -> B() -> A() 

H()-> G()-> B()-> A() 

我想知道最近3或5的方法調用,

我想跟蹤我的控制器和助手在Rails項目中的流程 但我需要示蹤劑並向我展示。

Routing Error 

undefined method `on' for Tracer:Class 

Try running rake routes for more information on available routes. 

這裏是我的代碼

 Tracer.on 
    def generate_nonexisted_book(price) 

    ~~~ 
    end 
    Tracer.off 
+0

爲什麼在方法A中不引發異常? –

+0

重複? http://stackoverflow.com/questions/11122233 – beautifulcoder

回答

4

Ruby有一個STDLIB稱爲Tracer。我會用一個小例子演示一下下面S:

require 'tracer' 

Tracer.on 
def a;end 
def b; a ; end 
def c; b ; end 
c 
Tracer.off 

讓我現在運行的代碼:

(arup~>test)$ ruby -v c.rb 
ruby 2.0.0p0 (2013-02-24 revision 39474) [i686-linux] 
#0:c.rb:4::-: def a;end 
#0:c.rb:5::-: def b; a ; end 
#0:c.rb:6::-: def c; b ; end 
#0:c.rb:7::-: c 
#0:c.rb:6:Object:>: def c; b ; end 
#0:c.rb:6:Object:-: def c; b ; end 
#0:c.rb:5:Object:>: def b; a ; end 
#0:c.rb:5:Object:-: def b; a ; end 
#0:c.rb:4:Object:>: def a;end 
#0:c.rb:4:Object:<: def a;end 
#0:c.rb:5:Object:<: def b; a ; end 
#0:c.rb:6:Object:<: def c; b ; end 
#0:c.rb:8::-: Tracer.off 
(arup~>test)$ 

一些象徵符號的說明這裏走來輸出:

  • +> + - 致電Ruby方法
  • - - 在新行上執行代碼
  • + < + - 從Ruby的方法
+0

我可以在我的rails項目中使用它,謝謝〜我有錯誤。 – newBike

+0

@poc你使用'require'tracer''嗎? –

+0

這很難找到,非常有用 –