歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

Linux下的兩個輔助編程工具 perf 和 GDB

前幾天在實驗室做了幾個小實驗,受益匪淺,寫代碼倒是其次,最重要的是漸漸了解了真實的 計算機科學 工作方式。

很多工作都可以用 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 生成的報告,顯示具體的函數占用時間排名。

perf report 界面

Copyright © Linux教程網 All Rights Reserved