2016-09-30 41 views
4

我想知道gprof中是否有任何API在运行时启用和禁用受监控应用程序的分析。我很感兴趣的是禁用代码的某些部分的分析并使其能够专注于那些对我有意思的事情。我的意思是,有没有办法避免这样做?在运行时启用和禁用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没有这个函数的原型或手册页,但它确实存在。

+0

真棒谢谢你!它也适用于英特尔编译器。只是好奇,你还记得你从哪里得到这些信息? – Harald

+0

@Harald我曾经在一个内核中分析代码,看看我们的libc是如何做的。当我大约10年前需要Linux时,我记得它,检查和Linux实现相同的东西。 – Art

+0

@Harald btw。这不应该依赖于编译器,因为编译器只是使用libc提供的钩子。 – Art

相关问题