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