簡體   English   中英

從 gprof 結果中排除 function

[英]Excluding a function from gprof results

我想從 gprof 生成的 output 中排除一些函數。 換句話說,我不希望在計算每個 function 在執行期間花費的時間百分比時包括它們。 我在一處讀到-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.

e.g.

gprof --no-time=name_of_function_you_dont_want_to_profile.

將此與其他 gprof 選項一起使用(-E -e 絕對排除)

據該男子稱:

  • 對於顯示平面輪廓並從中排除 function 您需要使用-P選項:

     gprof main gmon.out -Pfunction_name
  • 為了顯示調用圖並從中排除 function 您需要使用-Q選項:

     gprof main gmon.out -Qfunction_name

此選項可以重復並同時使用:

gprof main gmon.out -Pfunction_name -Qfunction_name -Qother_function_name

如果您需要從一份報告中排除 function 但不排除其他任何 function 您需要使用-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

為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM