Railsアプリケーションですべてのメソッド呼び出しを簡単に記録する方法はありますか?すべてのメソッド呼び出しをRailsアプリケーションに記録する
私の主な用途はテスト(デバッグテスト)です。 stacktraceが提供する以上の歴史を持っていたいと思います(たとえば、 '-b'オプションを指定してrspecを実行する場合)。
Railsアプリケーションですべてのメソッド呼び出しを簡単に記録する方法はありますか?すべてのメソッド呼び出しをRailsアプリケーションに記録する
私の主な用途はテスト(デバッグテスト)です。 stacktraceが提供する以上の歴史を持っていたいと思います(たとえば、 '-b'オプションを指定してrspecを実行する場合)。
これは簡単です。
#!/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
アプリケーションで説明していますが非常に遅くなり、あなたが望むよりも多くの出力を得る可能性があります:ちょうどあなたのスクリプト/サーバーへのコードの5行を追加します。不要なものを印刷しないように、ファイル/クラス/関数名の条件を簡単に追加できます。
最初にstacktraceは、エラーが発生したときにスタックにあったすべてのメソッド呼び出しです。これ以外に、他にどのような履歴が必要ですか?
第2に、あなたの質問に答えるために、すべてのメソッド呼び出しを簡単に記録する方法はありません。あなたはログレベルを上げてデバッグすることができます。これはログにもっと多くのものを与えるはずですが、これはメソッド呼び出しと無関係に実際にログに記録されたものに過ぎません。
メソッド呼び出しの前後にいくつかのログステートメントが印刷されるようにルビをパッチするのは難しくありませんが、これはスタックトレースがあなたに与えるものに似ていますとにかく行番号などを取得しないため、潜在的に少なくなります。
スタックトレース以外の情報が必要な場合は、ほとんどの人がそれを行う方法です。
Perftoolsお探しの商品が表示されることがあります。それはプロセス全体を分析し、何かに見えるグラフィカルなビューを与えることができますlike this。 Rack perftools profilerはperftoolsを使用するRubygemであり、Railsアプリケーションとの統合が容易なので、試してみることをお勧めします。
私は間違いなくスタックトレース上の何が起こったかの歴史を意味します。具体的には、私は宣言的な権限からレールアプリケーションのcancanに切り替えています。突然、私のrspecテストで私の 'should_receive'の束がもう機能しなくなりましたが、ログ内のdbコールはうまく見えます。私は何が変わったのか知っていれば、私はテストを更新し、私の気持ちがいいと思う。 – dafmetal