码迷,mamicode.com
首页 > 数据库 > 详细

Linux下的两个辅助编程工具 perf 和 GDB

时间:2016-06-20 23:49:32      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:

前几天在实验室做了几个小实验,受益匪浅,写代码倒是其次,最重要的是渐渐了解了真实的 计算机科学 工作方式。

很多工作都可以用 linux 下的工具高效完成,例如 要跑一组实验,其中有两个参数变动,那么就不需要手动运行多次,只用一个 Shell Script 就能完成。配合 awk 效率更高。

其中两个工具真得很受用,一个是 GDB, 一个是 perf。前者用于程序调试,后者用于程序性能侦测。

 

GDB 是linux下很出色的调试器, 很多常用的调试工具,例如 breakpoint, call stack 都有很好的实现。

对于 GDB, 推荐阅读这个 tutorial, 非常好,尤其是后面集成的针对 STL 的 pcontainer 方法。 

对于之前经常发生的段错误 SF, 以及经常出现的 core dump,都能用 GDB 准确定位。只不过,在使用 g++ 编译的时候,要加上 -ggdb 参数,同时尽量不要打开优化,否则编译器很难记录每个符号。

 

perf 是内置在 linux 内核里的一个程序性能侦测工具。具体源码应该可以在 kernel 里找到。

之前使用一个图系统跑实验,发现多线程性能不佳,但是不能找到瓶颈,使用 perf 就能轻易看到,是 omp_barrier_wait_end,通过搜索能知道这个函数是 OpenMP 的同步方法,那么就能推断出问题出在 OpenMP 的任务分配上,不均衡的任务分配导致不均衡的计算时间。

perf 内置了多个工具,具体内容可以参看 man perf,其中最重要的两个是 report 和 record。

类似于 time 命令一样, 在程序前面加上 perf record, 可以生成一个报告,这个报告能够显示在程序此次运行里每个函数占用的时间比,一般报告的后缀名都是 .perf.data 。

生成报告之后就用 perf report,这个工具能够分析 record 生成的报告,显示具体的函数占用时间排名。

技术分享

Linux下的两个辅助编程工具 perf 和 GDB

标签:

原文地址:http://www.cnblogs.com/daghlny/p/5602170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!