2011-08-13 74 views
8

有沒有簡單的方法來記錄Rails應用程序中的所有方法調用?記錄Rails應用程序中的所有方法調用

我的主要用途是測試(和調試測試)。我想有一個比stacktrace提供的更多的歷史記錄(例如,當運行rspec和'-b'選項時)。

回答

18

這很容易做到。只需添加5行代碼到腳本/服務器:

#!/usr/bin/env ruby 
set_trace_func proc { 
    |event, file, line, id, binding, classname| 
    if event == "call" or event == "return" 
    printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname 
    end 
} 

require File.expand_path('../../config/boot', __FILE__) 
require 'commands/server' 

它在http://phrogz.net/ProgrammingRuby/ospace.html#tracingyourprogramsexecution

您的應用程序描述會變得非常慢,你可能會得到比你想要更多的輸出。您可以輕鬆地在文件/類/函數名稱上添加更多條件以避免打印不需要的內容。

-3

首先stacktrace是發生錯誤時堆棧中的每個方法調用,除此之外還有哪些其他歷史記錄?

其次,要回答你的問題,沒有簡單的方法來記錄所有的方法調用。您可以調整日誌級別以調試哪些應該會給日誌中的更多內容,但這隻會是某人實際選擇記錄的事情,與方法調用無關。

以這樣的方式修補ruby可能不會那麼困難,即每次方法調用都會在方法執行前後打印一些日誌語句,但這會再次類似於堆棧跟蹤會給你的東西無論如何和潛在的更少,因爲你不會得到行號等

如果你想要比堆棧跟蹤更多的信息,日誌是大多數人會這樣做的方式。

+0

我絕對的意思是在堆棧跟蹤之前發生了什麼*的歷史。實際上,我正在從一個rails應用程序的declarative_authorization切換到cancan,並且在我的rspec測試中突然發現一堆'should_receive'不再起作用,儘管日誌中的db調用看起來很好。我想,如果我知道哪些呼叫改變了,我可以更新我的測試,並以我的快樂方式。 – dafmetal

3

Perftools可能會給你你要找的。它分析整個過程,並可以給你一個看起來像是like this的圖形視圖。 Rack perftools profiler是一個使用perftools的rubygem,可以很容易地與Rails應用程序集成,所以如果你想嘗試的話,我會推薦使用它。

相關問題