2011-08-13 20 views

Odpowiedz

18

To łatwe zadanie. Wystarczy dodać 5 linii kodu w skrypcie/serwer:

#!/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' 

Jest opisany w http://phrogz.net/ProgrammingRuby/ospace.html#tracingyourprogramsexecution

aplikacja będzie się dość wolno i można dostać więcej niż wyjście chcesz. Możesz łatwo dodać więcej warunków na nazwach plików/klas/funkcji, aby uniknąć drukowania niepożądanych rzeczy.

-3

Po pierwsze stacktrace IS każde wywołanie metody, które było na stosie w momencie wystąpienia błędu, jakiej innej historii mógłbyś chcieć poza tym?

Po drugie, aby odpowiedzieć na twoje pytanie, nie ma łatwego sposobu rejestrowania wszystkich wywołań metod. Możesz zwiększyć poziom logu do debugowania, co powinno dać więcej informacji w dziennikach, ale będą to tylko rzeczy, które ktoś faktycznie wybrał do logowania, niezwiązane z wywołaniami metod.

Prawdopodobnie nie byłoby trudno zaszyfrować ruby ​​w taki sposób, że każde wywołanie metody wypisze niektóre instrukcje dziennika przed i po wykonaniu metody, ale to znowu będzie podobne do tego, co dałoby ci ślad stosu w każdym razie i potencjalnie mniej, ponieważ nie dostaniesz numerów linii itp.

Jeśli chcesz uzyskać więcej informacji niż ślad stosu, logowanie jest sposobem, w jaki zrobi to większość ludzi.

+0

Zdecydowanie mam na myśli historię tego, co się stało * przed * tym, co znajduje się na stosie. Praktycznie przechodzę z funkcji initialative_authorization na cancan w aplikacji rails, i nagle kilka moich "should_receive" w moich testach rspec już nie działa, chociaż wywołania db w logu wyglądają dobrze. Myślę, że jeśli wiem, co zmieniły telefony, mogę zaktualizować moje testy i być na mojej wesołej drodze. – dafmetal

3

Perftools może dać ci to, czego szukasz. Analizuje cały proces i może dać widok graficzny, który wygląda na coś, co wygląda na coś, co wygląda na like this. Rack perftools profiler to rubygm, który używa perftools i ułatwia integrację z aplikacją Rails, więc polecam pójście z tym, jeśli chcesz go wypróbować.

Powiązane problemy