簡體   English   中英

找出減慢C程序速度的工具?

[英]Tools to find out what is slowing down a C program?

我有一個由幾個.h和.c文件和許多函數組成的程序。 還有一些功能可以調用其他功能等。 現在,這實際上是一項任務,所以我知道該計划需要多長時間才能達到目的。

問題是,與我給出的時間相比,我的程序花費了太多時間。 是否有可能找出哪個函數花費了太多時間或者代碼的哪個部分使程序停止運行?


我沒有在這里給出代碼,因為它太長了。 我知道沒有人能回答為什么“我的節目”很慢但我說話一般! 是否有工具可以衡量每個功能需要多長時間或類似的功能? 我正在使用gcc,我在Linux上。

由於您使用的是linux,因此您可能已經安裝了gprof探查器。 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.02s執行它。)。 這個示例數據來自本指南 ,您應該閱讀它,因為它提供了更多的解釋,並描述了如何操縱分析以獲得逐行分析等內容。

正如上面的dbaupp所建議的,gprof是一個很好的linux工具。 除此之外,如果您可以訪問IBM Rational Quantify ,您也可以嘗試使用它。 它是一種商業工具,但提供了更多時間和呼叫流程等功能的良好圖形視圖。

暫無
暫無

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

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