2016-09-30 20 views
4

gprof 내에 모니터링되는 응용 프로그램에서 런타임에 프로파일 링을 활성화 및 비활성화하는 API가 있는지 궁금합니다. 코드의 특정 부분에 대한 프로파일 링을 비활성화하고 흥미로운 부분에 초점을 맞추는 것에 관심이 있습니다. 내 말은, 이것을 피하는 방법이 있을까요?런타임시 gprof를 활성화 및 비활성화 할 수 있습니까?

int main (void) 
{ 

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

    interesting_routine(); 
} 

이 기능에 대한 참조를 포함하지 않는 것 계측 옵션을 참조하여 GCC 웹 사이트에서이 link.

답변

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에는이 기능에 대한 프로토 타입 또는 매뉴얼 페이지가 없지만 존재합니다.

+0

감사합니다. 또한 인텔 컴파일러에서도 작동합니다. 단지 호기심,이 정보를 어디에서 얻었는지 기억하십니까? – Harald

+0

@Harald 커널에서 코드를 한 번 프로파일 링하고 libc가 어떻게 작동하는지 살펴 보았습니다. 10 년 전 나는 이것을 리눅스에서 필요로했을 때 체크하고 리눅스는 똑같은 것을 구현했다. – Art

+0

@ 할아버지 btw. 이것은 컴파일러가 libc가 제공하는 훅을 사용하기 때문에 컴파일러에 전혀 의존해서는 안됩니다. – Art