从gprof结果中排除函数

我想从gprof生成的输出中排除一些函数。 换句话说,在计算执行期间每个函数花费的百分比时间时,我不希望将它们包括在内。 我在一个地方阅读-E选项可以使用。

不过,我正在使用gprof -E function_to_be_exluded my_program_name ,但没有任何反应。 手册说这是贬值,你应该使用symspecs来代替。 不过,我浪费了半个小时的时间,试图弄清楚如何用symspecs来实现它,但没有运气。 任何人都可以帮助我。

确切地说,gprof -e -E被弃用,并被具有参数 – symspecs的新的相关选项所取代。 所以尝试使用:

 gprof --no-time=symspec The -n option causes "gprof", in its call graph analysis, not to propagate times for symbols matching symspec. eg gprof --no-time=name_of_function_you_dont_want_to_profile. 

与您的其他gprof选项一起使用(-E -e绝对排除)

据该男子说:

  • 为了显示扁平的配置文件并从中排除功能,您需要使用-P选项:

     gprof main gmon.out -Pfunction_name 
  • 对于显示调用图和排除功能,你需要使用-Q选项:

     gprof main gmon.out -Qfunction_name 

这个选项可以在同一时间重复使用:

 gprof main gmon.out -Pfunction_name -Qfunction_name -Qother_function_name 

如果您需要从一个报告中排除函数但不排除其他函数,则需要使用-p-q选项。

例:

创建程序:

 #include <stdio.h> #include <stdlib.h> void func_a () {printf ("%s ",__FUNCTION__);} void func_b () {printf ("%s ",__FUNCTION__);} void func_c () {printf ("%s ",__FUNCTION__);} int main () { func_a (); func_b (); func_c (); return EXIT_SUCCESS; } 

编译它: gcc main.c -pg -o main

并启动:

 $ ./main func_a func_b func_c 

生成配置文件报告:

  • 如果您只需要打印平面轮廓,您需要打电话:

     $ gprof main gmon.out -b -p % cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 1 0.00 0.00 func_a 0.00 0.00 0.00 1 0.00 0.00 func_b 0.00 0.00 0.00 1 0.00 0.00 func_c 
  • 如果您需要打印平面配置文件,但不包括函数func_afunc_c以及完整的调用图,则需要调用:

     $ gprof main gmon.out -b -Pfunc_a -Pfunc_c -q % cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 1 0.00 0.00 func_b index % time self children called name 0.00 0.00 1/1 main [9] [1] 0.0 0.00 0.00 1 func_a [1] ----------------------------------------------- 0.00 0.00 1/1 main [9] [2] 0.0 0.00 0.00 1 func_b [2] ----------------------------------------------- 0.00 0.00 1/1 main [9] [3] 0.0 0.00 0.00 1 func_c [3] ----------------------------------------------- 
  • 如果您需要打印平面配置文件(不包括函数func_afunc_c和调用图(不包括func_b ,则需要调用:

     $ gprof main gmon.out -b -Pfunc_a -Pfunc_c -Qfunc_b % cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 1 0.00 0.00 func_b index % time self children called name 0.00 0.00 1/1 main [9] [1] 0.0 0.00 0.00 1 func_a [1] ----------------------------------------------- 0.00 0.00 1/1 main [9] [3] 0.0 0.00 0.00 1 func_c [3] ----------------------------------------------- 

除非我误解了你的问题

gprof a.out –no-time = function_name

为我工作。