星期六, 2月 12, 2011

gcc Notes

最近 blog 應該會有很多這種小型文章,暫時記起來備忘 XD。

Basic Profiling with gcc

其實沒很難,重點是知不知道而己。這是我最近無聊看文件發現的。假設我們有一個 main.cpp 那麼編譯的時候,加入 -pg option 在這個範例中,產生的是 main.out 的執行檔

g++ -g -Wall -pg main.cpp -o main.out
接著執行該程式
./main.out
那麼會得到一個 gmon.out,這個時候再執行。
gprof main.out gmon.out
那麼你應該就看到一堆資訊吐出來,而在最後的部分
granularity: each sample hit covers 4 byte(s) no time accumulated
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
  0.0       0.00     0.00   176165     0.00     0.00  __ZN2LS17 ...
  0.0       0.00     0.00   148611     0.00     0.00  __ZN2LS23 ...
  0.0       0.00     0.00   122722     0.00     0.00  __ZN2LS17 ...
  0.0       0.00     0.00   100775     0.00     0.00  __ZN2LS7 ...
  0.0       0.00     0.00   100226     0.00     0.00  __ZN2LS7 ...
可以看到每個 function call 被呼叫的次數及使用了多少時間。

昨天剛發現這個技巧,這代表我真的對 gcc 不夠熟。不然這個技巧蠻有趣的,可以快速的看出一些基本的事。不過這個方法的問題就是我不熟,其實在這個表的原始的 name 真的蠻醜的 ... 不知道是不是 C++ 的關係,有空再測測看了 XD。

gdb - print macro

GDB中应该知道的几个调试方法 - Coolshell.cn 看到的,必要的時候可以在編譯的時候加上參數

-ggdb3

nm

看 symbol file 的好工具,雖然知道很好用,不過目前功力不足,但是先記著吧

---
純粹記錄,我的功力還是好弱 ... Orz