2012-06-08 22 views
6

我有一個程序組成的幾個.h和.c文件和很多功能。還有一些功能可以調用其他功能等等。 現在,這實際上是一項任務,所以我知道程序需要多少時間才能達到目的。找出什麼在減慢C程序的工具?

問題是,與我獲得的時間相比,我的程序需要的時間太多。 是否有可能找出哪些功能需要花費太多時間或哪部分代碼將程序關閉?


我沒有把代碼放在這裏,因爲它太長了。我知道沒有人能回答爲什麼「我的計劃」很慢,但我一般都在說話! 有沒有一種工具可以衡量每個功能花費多少時間或類似的東西? 我正在使用gcc,我在Linux上。

+5

這是無法回答的。存在整個根源的宇宙,你甚至沒有向我們展示過代碼。 –

+11

你應該看看[分析](https://en.wikipedia.org/wiki/Profiling_%28computer_programming%29)。這正是解決您的問題的過程。 ('gprof'是一個通常預裝在Unix/Linux系統上的分析器的示例。) – huon

+3

您應該仔細研究@dbaupp指示的代碼分析。一些工具 - valgrind = http://valgrind.org/,gprof = http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html ... http://oprofile.sourceforge。 net/news/= OProfile。 GProf在他們當中非常好,我經常使用它。 – verisimilitude

回答

9

既然你是在linux上,你可能已經安裝了gprof profiler。 gprof最基本的用法是通過編譯-pg選項(-g選項也需要獲取信息輸出)。例如

> gcc -g -pg -o my_executable my_file.c 

現在,您可以正常運行您的程序。然後運行

> gprof my_executable > profile.txt 

將輸出的分析信息爲profile.txt。這個數據看起來有點像

Flat profile: 

Each sample counts as 0.01 seconds. 
    % cumulative self    self  total   
time seconds seconds calls ms/call ms/call name  
33.34  0.02  0.02  7208  0.00  0.00 open 
16.67  0.03  0.01  244  0.04  0.12 offtime 
16.67  0.04  0.01  8  1.25  1.25 memccpy 
16.67  0.05  0.01  7  1.43  1.43 write 
16.67  0.06  0.01        mcount 
    0.00  0.06  0.00  236  0.00  0.00 tzset 
    0.00  0.06  0.00  192  0.00  0.00 tolower 
    0.00  0.06  0.00  47  0.00  0.00 strlen 
    0.00  0.06  0.00  45  0.00  0.00 strchr 
    0.00  0.06  0.00  1  0.00 50.00 main 
    0.00  0.06  0.00  1  0.00  0.00 memcpy 
    0.00  0.06  0.00  1  0.00 10.11 print 
    0.00  0.06  0.00  1  0.00  0.00 profil 
    0.00  0.06  0.00  1  0.00 50.00 report 

[...] 

,你可以讀出每個函數的一些數據(例如open被稱爲7208倍和0.02秒花在執行它。)。這個示例數據是從this guide中借用的,你應該閱讀它,因爲它給出了更多的解釋,並描述瞭如何操作分析以獲得逐行分析等內容。

+0

非常感謝。太棒了! – MinaHany

+0

如果不用'-g'進行編譯,那麼不同函數的時間比例可能會改變嗎? – simon

+0

@simon,我認爲這不會產生巨大的影響,但我不確定。 – huon

1

正如上面的dbaupp建議的那樣,gprof是一款優秀的linux工具。除此之外,如果您有權訪問IBM Rational Quantify,您也可以嘗試。它是一種商業工具,但提供了花費更多時間和通話流程等功能的良好圖形視圖。

+0

Holy ** $$$$ 7k **單用戶許可!這使得我所有的微軟工具看起來都很便宜... – 2012-06-08 05:15:15

+0

你知道什麼也很有趣,它是7.7k€,轉換爲超過$ 9.6k,所以愛上這樣的軸。 –