Linux c++ 性能分析工具gprof


程序分析工具不同於調試器,它只產生程序運行時某些函數的調用次數、執行時間等等宏觀信息,而不是每條語句執行時的詳細信息。Gprof是Linux下一個強有力的程序分析工具。對於C、Pascal或者Fortran77語言的程序,它能夠以“日志”的形式記錄程序運行時的統計信息:程序運行中各個函數消耗的時間和函數調用關系,以及每個函數被調用的次數等等。從而可以幫助程序員找出眾多函數中耗時最多的函數,也可以幫助程序員分析程序的運行流程。相信這些功能對於分析開源代碼的程序員來說,有着相當大的誘惑力。

用gprof分析程序

用gprof對程序進行分析主要分以下三個步驟:

l         用編譯器對程序進行編譯,加上-pg參數。

l         運行編譯后的程序。

l         用gprof命令查看程序的運行時信息。

 

-g  

產生帶有調試信息的目標代碼

Ignored. Provided for compatibility with other tools.

gcc 的 -g ,應該沒有人不知道它是一個調試選項,因此在一般需要進行程序調試的場景下,我們都會加上該選項,並且根據調試工具的不同,還能直接選擇更有針對性的說明,比如 -ggdb 。-g是一個編譯選項,即在源代碼編譯的過程中起作用,讓gcc把更多調試信息(也就包括符號信息)收集起來並將存放到最終的可執行文件內。 
相比-g選項, -rdynamic 卻是一個 連接選項 ,它將指示連接器把所有符號(而不僅僅只是程序已使用到的外部符號)都添加到動態符號表(即.dynsym表)里,以便那些通過 dlopen() 或 backtrace() (這一系列函數使用.dynsym表內符號)這樣的函數使用。

 

gprof可以對C\C++等應用程序進行剖析,可以打印出程序運行中各個函數消耗時間,方便優化代碼以及分析程序的運行流程。

為直觀查看gprof結果,可以使用gprof2dot工具生成圖

gprof2dot官方文檔: https://github.com/jrfonseca/gprof2dot

使用流程
一、編譯時加上-pg

例如有一個例子example.c程序

gcc example.c -pg -o example 

二、運行程序

./example arg1 arg2...

運行完程序之后,會在當前目錄生成一個文件gmou.out,這個文件會展示一些信息,但是分析結果不夠直觀,特別是函數的調用,因此可以進行步驟三

三、利用可視化工具展示結果

1. 安裝

     gprof2dot工具需要

            python: 2.7或3.3版本

            Graphviz

    在Linux系統安裝

    pip install gprof2dot

2. 使用

gprof ./example gmon.out|less -S  可以直接查看文字

gprof  ./example gmon.out |gprof2dot |dot -Tpng -o example.png  可視化展示 

會生成類似圖:

 

 

 

http://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html

https://www.cnblogs.com/LiuYanYGZ/p/5550544.html

https://blog.csdn.net/weixin_42670653/article/details/82147911


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM