2016-09-30 3 views
4

Интересно, есть ли какой-либо API в пределах gprof, чтобы включить или отключить профилирование во время выполнения контролируемым приложением. Мне интересно отключить профилирование определенных частей кода и дать ему возможность сосредоточиться на тех, которые мне интересны. Я имею в виду, есть ли способ избежать этого?Включить и отключить gprof во время выполнения?

int main (void) 
{ 

    // disable gprof ? 
    uninteresting_routine(); 
    // enable gprof ? 

    interesting_routine(); 
} 

Это link с сайта GCC со ссылкой на параметры измерительных приборов, кажется, не содержит никакой ссылки на эту функциональность.

ответ

2

Существует недокументированный и скрытый способ сделать это, что работает на некоторых системах (по крайней мере, некоторые, если не все, версии glibc и некоторые BSD).

$ cat foo.c 
extern void moncontrol(int); 

static void 
foo(void) 
{ 
} 

static void 
bar(void) 
{ 
} 

int 
main(int argc, char **argv) 
{ 
    moncontrol(0); 
    foo(); 
    moncontrol(1); 
    bar(); 
    return 0; 
} 
$ cc -o foo -pg foo.c && ./foo 
$ gprof foo | egrep 'foo|bar' 
    0.00  0.00  0.00  1  0.00  0.00 bar 
[1]  0.0 0.00 0.00  1   bar [1] 
    [1] bar 

У Glibc нет прототипа или man-страницы для этой функции, но он существует.

+0

Удивительное спасибо! Он также работает с компилятором Intel. Просто любопытство, вы помните, где вы получили эту информацию? – Harald

+0

@Harald Я работал над профилированием кода в ядре один раз и смотрел, как наш libc сделал что-то. Когда мне было нужно это на linux около 10 лет назад, я вспомнил об этом, проверил и linux реализовал то же самое. – Art

+0

@ Харальд кстати. Это не должно зависеть от компилятора вообще, поскольку компилятор просто использует перехваты, которые предоставляет libc. – Art

Смежные вопросы