我想从gprof生成的输出中排除某些函数。换句话说,在计算执行期间每个函数花费的百分比时间时,我不希望它们被包括在内。我在一个地方阅读 -E 选项可以使用。
但是我正在使用 gprof -E function_to_be_exluded my_program_name ,但没有任何反应。该手册说它已折旧,您应该使用 symspecs 。但是,我浪费了半个小时试图弄清楚如何用 symspecs 来实现它,但没有运气。任何人都可以帮助我。
答案 0 :(得分:4)
确切地说,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.
e.g.
gprof --no-time=name_of_function_you_dont_want_to_profile.
将此选项与其他gprof选项一起使用(-E -e明确排除)
答案 1 :(得分:3)
据该男子说:
要显示平面配置文件并从中排除功能,您需要使用-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_a
和func_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_a
和func_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]
-----------------------------------------------
答案 2 :(得分:2)
除非我误解了你的要求......
gprof a.out --no-time = function_name
适合我。