【C++】程序性能分析及可视化

一,性能分析工具的使用(gprof)

  1. 编译需要加-pg选项
  2. 运行可执行文件,会自动生成生成gmon.out 文件,命令格式如下:
    ./a.out  
    #a.out指可执行文件
  3. 使用gprof生成性能分析结果,命令格式如下:
gprof ./a.out gmon.out >out.log

//命令中 a.out为可执行文件;gmon.out为第二步自动生成的结果;out.log为性能分析结果

      此时可以直接打开out.log查看结果

二,性能分析工具的使用(valgrind)

Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程序错误的心脏,真可谓是程序员的瑞士军刀。

使用callgrind工具生成性能分析数据

命令格式如下:

valgrind --tool=callgrind ./exproxy 

其中 ./exproxy就是我们要分析的程序。执行完毕后,就会在当前目录下生成一个文件。文件名为“callgrind.out.进程号”。

如果你调试的程序是多线程,你也可以在命令行中加一个参数 -separate-threads=yes。这样就会为每个线程单独生成一个性能分析文件。如下:

valgrind --tool=callgrind --separate-threads=yes ./exproxy

生成的文件除了callgrind.out.31113外,还会多出一些子线程的文件。文件名如下:

callgrind.out.31113-01    callgrind.out.31113-02    callgrind.out.31113-03

三,将性能分析结果可视化

1,安装gprof2dot工具,具体安装步骤见附录。

2,运行gprof2dot工具生成可视化图,gprof结果格式为:

python gprof2dot.py out.log |dot -Tpng -o output.png

callgrind格式为:

python gprof2dot.py -f callgrind callgrind.out.5627 |dot -Tpng -o output.png

 运行完之后,打开output.png图片查看结果

注:gprof2dot默认是部分函数调用图,对性能影响不大的函数调用都不显示,例如类的构造,析构函数等。

 如果想要显示全部的函数调用,可以 gprof2dot -n0 -e0 ,默认是n0.5即影响小于5%的函数就不显示了。

当然这样图片会很乱,因为显示内容很多。同时可以 加上 -s 参数,表示不显示诸如模板,函数入口参数等等,使得

函数名称显示更加精简。

eg:

python gprof2dot.py -n0 -e0 -s out.log |dot -Tpng -o output.png

附:gprof2dot安装步骤

1,gprof2dot下载地址

https://github.com/jrfonseca/gprof2dot

2,安装python和graphviz

python最低版本为2.7,python3也支持。graphviz的安装主要是支持dot功能。具体安装方法如下:

On Debian/Ubuntu run:

apt-get install python3 graphviz

On RedHat/Fedora run

yum install python3 graphviz

3,gprof2dot安装

如果pip可以安装则直接可以通过以下命令直接安装。

pip install gprof2dot

用此方法安装后,在使用时可以直接用以下命令可视化

 gprof2dot -f callgrind callgrind.out.15668 |dot -Tpng -o output.png

若此方法安装不了,可以直接下载gprof2dot包,然后解压,以后每次执行的时候把输出文件拷贝到和gprof2dot.py同一个目录下即可。 

gprof2dot包地址:https://github.com/jrfonseca/gprof2dot/archive/master.zip

参考:

https://www.cnblogs.com/rocketfan/archive/2009/11/15/1603465.html

https://www.cnblogs.com/zengkefu/p/5642991.html

发布了46 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/xll_bit/article/details/103308816