Как я могу использовать NYTProf в библиотеке - PullRequest
3 голосов
/ 30 июля 2010

Мне интересно, можно ли Devel :: NYTProf использовать в качестве библиотеки в другой библиотеке.Я хотел бы сделать что-то вроде следующего

around 'somesub' => sub {
    my $orig = shift;
    my $self = shift;
    start-timing;
    $self->$orig(@_);
    end-timing;
    print '$time';
}

, но из его документации я не могу определить, можно ли его использовать таким образом.Является ли это возможным?может кто-нибудь сказать мне вызовы API, которые я буду делать?

Ответы [ 2 ]

4 голосов
/ 06 августа 2010

Самое простое, самое надежное, что нужно сделать:

  1. Добавить DB::enable_profile и DB::disable_profile вызовов в вашу библиотеку (вы можете проверить, определены ли сначала подпрограммы, чтобы избежать поломоккогда NYTProf не загружен).
  2. Запустите perl с -d: NYTProf и NYTPROF=start=no в среде.

Все это довольно четко объяснено в Devel :: NYTProf docs .

Вы можете попробовать загрузить библиотеку NYTProf условно, но дело здесь в том, что только материал, скомпилированный после загрузки NYTProf, получает любые точки трассировки.Это может звучать совершенно нормально, поскольку вы хотите только профилировать свою библиотеку, но не ясно, что произойдет, если ваша библиотека вызовет (или перезвонит) любой другой код, и я не проверял это.Наверное, намного проще сделать простую версию make do:)

0 голосов
/ 30 июля 2010

Я не думаю, что это можно использовать таким образом.Но вы можете взглянуть на Aspect :: Library :: Profiler или Aspect :: Library :: Timer

...