Как игнорировать некоторые вызовы подпрограмм в отчетности NYTProf - PullRequest
1 голос
/ 09 ноября 2010

Я пытаюсь профилировать сценарий Perl, но CORE :: sleep поглощает все пространство (и время) моего отчета.

Как я могу сказать NYTProf игнорировать спящие вызовы?

Предполагается, что у нас есть следующий скрипт:

sub BrandNewSubroutine {
  sleep 10;
  print "Odelay\n";
}
BrandNewSubroutine();

Я хочу избавиться от следующей строки отчета:

  • Эксклюзивное время; Включенное время; Подпрограмма
  • 10,0; 10,0; основная :::: CORE: sleepmain :: CORE: сон (Опкод)

Редактировать: Использование DB :: disable_profile () и DB :: enable_profile () не сработает, так как добавит время сна ко времени BrandNewSubroutine Inclusive.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Я бы предложил обернуть вызовы в sleep (возможно, с помощью метода, упомянутого в perlsub ) с DB::disable_profile() и DB::enable_profile() вызовами ( УПРАВЛЕНИЕ ПРОФИЛИРОВАНИЕМ В ВРЕМЯ РАБОТЫ)в документации NYTProf ) или постобработке отчета для удаления вызывающих оскорбления вызовов.

0 голосов
/ 30 декабря 2012

CORE :: accept уже игнорируется так, как вы хотите CORE :: sleep, поэтому механизм уже работает.Смотрите этот код в NYTProf.xs:

    /* XXX make configurable eg for wait(), and maybe even subs like FCGI::Accept
     * so perhaps use $hide_sub_calls->{$package}{$subname} to make it general.
     * Then the logic would have to move out of this block.
     */
    if (OP_ACCEPT == op_type)
        subr_entry->hide_subr_call_time = 1;

Так что с небольшим взломом (OP_SLEEP == op_type || OP_ACCEPT == op_type) вы сможете игнорировать CORE :: sleep таким же образом.

Я бы принял патч , чтобы включить его в качестве опции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...